﻿/********************************************************
   파일명 : icommon.js
   작성자 : 기술연구소
   작성일 : 2009.03.25
   수정일 :
******************************************************** */
var debug_mode  = false;

var iconst      = new Object();     /* 1. 상수정의 객체         	*/
var istring     = new Object();     /* 2. 스트링 객체          	 	*/
var inumber     = new Object();     /* 3. 숫자 객체             	*/
var idate       = new Object();     /* 4. 날짜 객체             	*/
var itime       = new Object();     /* 5. 시간객체              	*/
var icookie     = new Object();     /* 6. 쿠키객체              	*/
var iwindow     = new Object();     /* 7. 윈도우객체            	*/
var iobject     = new Object();     /* 8. 컨트롤 객체          	 	*/
var iutil       = new Object();     /* 9. 유틸 객체             	*/
var ievent      = new Object();     /* 10. 이벤트 객체          	*/
var iformat     = new Object();     /* 11. 포맷 객체            	*/
var iajax       = new Object();     /* 12. ajax 객체            	*/
var itable      = new Object();     /* 13. 테이블 제어 객체     	*/
var igrid       = new Object();     /* 14. 그리드 데이타 처리 객체  */

iformat.ipost       = new Object();     /* 10-1. 우편번호       */
iformat.ijuminno    = new Object();     /* 10-2. 주민번호       */
iformat.isaupno     = new Object();     /* 10-3. 사업자등록번호 */
iformat.icorpno     = new Object();     /* 10-4. 법인번호       */
iformat.iforeignno  = new Object();     /* 10-5. 외국인번호     */
iformat.iphone      = new Object();     /* 10-6. 전화번호       */
iformat.iemail      = new Object();     /* 10-7. 이메일         */
iformat.imoney      = new Object();     /* 10-8. 금액           */


/* ==================================================================== */
/*   1. iconst 구현부                                                   */
/* ==================================================================== */

// operation code
iconst.OPCODE = "opcode";

/** 조회 OP Code */
iconst.S01 = "S01";
iconst.S02 = "S02";
iconst.S03 = "S03";
iconst.S04 = "S04";
iconst.S05 = "S05";
iconst.S06 = "S06";
iconst.S07 = "S07";
iconst.S08 = "S08";
iconst.S09 = "S09";

/** 등록 OP Code */
iconst.I01 = "I01";
iconst.I02 = "I02";
iconst.I03 = "I03";
iconst.I04 = "I04";
iconst.I05 = "I05";
iconst.I06 = "I06";
iconst.I07 = "I07";
iconst.I08 = "I08";
iconst.I09 = "I09";

/** 수정 OP Code */
iconst.U01 = "U01";
iconst.U02 = "U02";
iconst.U03 = "U03";
iconst.U04 = "U04";
iconst.U05 = "U05";
iconst.U06 = "U06";
iconst.U07 = "U07";
iconst.U08 = "U08";
iconst.U09 = "U09";

/** 삭제 OP Code */
iconst.D01 = "D01";
iconst.D02 = "D02";
iconst.D03 = "D03";
iconst.D04 = "D04";
iconst.D05 = "D05";
iconst.D06 = "D06";
iconst.D07 = "D07";
iconst.D08 = "D08";
iconst.D09 = "D09";

/** 리포트 OP Code */
iconst.R01 = "R01";
iconst.R02 = "R02";
iconst.R03 = "R03";
iconst.R04 = "R04";
iconst.R05 = "R05";
iconst.R06 = "R06";
iconst.R07 = "R07";
iconst.R08 = "R08";
iconst.R09 = "R09";

/* CODE(NO) → NAME 변환용 OP Code */
iconst.BRCD          = "BRCD";         // 부점코드
iconst.ACNO          = "ACNO";         // 계좌번호
iconst.EMNO          = "EMNO";         // 직원번호
iconst.IVBN_CSNO     = "IVBN_CSNO";    // 고객번호
iconst.PEF_NO        = "PEF_NO";       // 펀드번호
iconst.BANK_PRDC_CD  = "BANK_PRDC_CD"; // 은행상품코드
iconst.IB_FNNC_PDCD  = "IB_FNNC_PDCD"; // IB금융상품코드
iconst.ACCD          = "ACCD";         // 계정과목코드
iconst.IB_BSNS_NO    = "IB_BSNS_NO";   // IB사업번호
iconst.IB_RCMD_EMNO  = "IB_RCMD_EMNO"; // 담당자(추천기본)
iconst.IB_PRJC_EMNO  = "IB_PRJC_EMNO"; // 담당자(검토기본)
iconst.DATE_TO_INTR  = "DATE_TO_INTR"; // 기준일자 -> 금리
iconst.CSTM_STCK_MNNO= "CSTM_STCK_MNNO";//고객주식관리번호
iconst.CSTM_STCK_MNNO= "CSTM_STCK_MNNO";//고객주식관리번호
iconst.DLBT_ATHZ_NO  = "DLBT_ATHZ_NO";  //심의승인번호(승인신청번호)
/** 기타 OP Code */
iconst.Z01 = "Z01"; // SET COMBO
iconst.Z02 = "Z02"; // SET DATE

iconst.SUCCESS_CODE  = "0000";	//처리 정상 코드
iconst.FAILURE_UCODE = "9998";	//사용자 오류코드
iconst.FAILURE_SCODE = "9999";	//시스템 오류코드
iconst.INITVIEW      = "initview"; //초기화면

iconst.RESULT_CODE       = "RESULT_CODE";	    //처리 결과 코드
iconst.RESULT_MSG        = "RESULT_MESSAGE";  	//처리 결과 메세지
iconst.PAGE_NAME 		 = "PAGE_NAME";			//페이지명
iconst.PAGE_BYNAME 		 = "PAGE_BY_NAME";		//페이지주석
iconst.SERVICE_NAME 	 = "SERVICE_NAME";		//서비스명
iconst.SERVICE_BYNAME  	 = "SERVICE_BY_NAME";	//서비스주석
iconst.TRACE_MSG    	 = "TRACE_MESSAGE";		//트레이스메세지
iconst.THROWABLE_NAME    = "THROWABLE_NAME";	//Throwable 클래스
iconst.SQL_STATE    	 = "SQL_STATE";			//SQL STATE
iconst.SQL_ERROR_CODE    = "SQL_ERROR_CODE";	//SQL ERROR CODE
iconst.MENU_INFO		 = "MENU_INFO";			//MENU_INFO - MENU_NAME(MENU_ID)
iconst.OP_INFO			 = "OP_INFO";			//OP_INFO - OP_NAME(OP_CODE)
iconst.CHARGE_PERSON	 = "CHARGE_PERSON";		//담장자
iconst.ERROR_CLASS_NAME  = "ERROR_CLASS_NAME";	//에러 프로그램명
iconst.ERROR_LINE_NUMBER = "ERROR_LINE_NUMBER"; //에러 라인넘버

iconst.SEP_DATE  = '-';                  		// 날짜구분자
iconst.SEP_TIME  = ':';                  		// 시간구분자
iconst.SEP_MONEY = ',';                  		// 금액단위

// 권한오류
iconst.NOT_SEARCHABLE_MSG   = "조회 권한이 없습니다.";
iconst.NOT_INSERTABLE_MSG   = "등록 권한이 없습니다.";
iconst.NOT_VIEWABLE_MSG     = "보기 권한이 없습니다.";
iconst.NOT_UPDATABLE_MSG    = "수정 권한이 없습니다.";
iconst.NOT_DELETABLE_MSG    = "삭제 권한이 없습니다.";
iconst.NOT_WHOLABLE_MSG     = "전체 권한이 없습니다.";

// 등록메시지
iconst.INSERT_QUESTION      = "등록 하시겠습니까?";
iconst.INSERT_CONFIRM       = "등록 하였습니다.";
iconst.INSERT_FAILURE       = "등록을 실패하였습니다.";

// 저장메시지
iconst.SAVE_QUESTION        = "저장 하시겠습니까?";
iconst.SAVE_CONFIRM         = "저장 하였습니다.";
iconst.SAVE_FAILURE         = "저장을 실패하였습니다.";

// 수정메시지
iconst.UPDATE_QUESTION      = "수정 하시겠습니까?";
iconst.UPDATE_CONFIRM       = "수정 하였습니다.";
iconst.UPDATE_FAILURE       = "수정을 실패하였습니다.";

// 삭제메시지
iconst.DELETE_QUESTION      = "삭제 하시겠습니까?";
iconst.DELETE_CONFIRM       = "삭제 하였습니다.";
iconst.DELETE_FAILURE       = "삭제을 실패하였습니다.";

// 데이터메시지
iconst.DATA_NOT_FOUND       = "데이터가 존재하지 않습니다.";
iconst.DATA_FOUND           = "데이터가 이미 존재합니다.";

// 검색결과메시지
iconst.DATA_NOT_SEARCHED    = "검색 결과가 없습니다.";

// 로그인메시지
iconst.LOGIN_INFORMATION    = "로그인 하십시오.";
iconst.LOGIN_CONFIRM        = "로그인 되었습니다.";

// 로그아웃메시지
iconst.LOGOUT_CONFIRM       = "로그아웃 되었습니다.";

//기타메시지
iconst.DUPLICATION_CONFIRM  = "중복 되었습니다.";
iconst.AVAILABLE_CONFIRM    = "사용할 수 있습니다.";

// 취소메시지
iconst.CANCEL_QUESTION      = "취소 하시겠습니까?";
iconst.CANCEL_CONFIRM       = "취소 하였습니다.";
iconst.CANCEL_FAILURE       = "취소를 실패하였습니다.";

// 권한메시지
iconst.AUTHORITY_DENIAL     = "사용 권한이 없습니다.";

// 승인메시지
iconst.APPR_QUESTION        = "승인 하시겠습니까?";
iconst.APPR_CONFIRM         = "승인 하였습니다.";

// 반려메시지
iconst.REJECT_QUESTION      = "추진중단 하시겠습니까?";
iconst.REJECT_CONFIRM       = "추진중단 하였습니다.";

// 변경메시지
iconst.CHANGE_QUESTION      = "변경 하시겠습니까?";
iconst.CHANGE_CONFIRM       = "변경 하였습니다.";

// 업로드메시지
iconst.UPLOAD_QUESTION      = "업로드 하시겠습니까?.";
iconst.UPLOAD_CONFIRM       = "업로드 하였습니다.";

// 완료메시지
iconst.COMPLETE_CONFIRM     = "완료 하였습니다.";
iconst.COMPLETE_FAILURE     = "완료를 실패하였습니다.";

// 전송메시지
iconst.SEND_QUESTION     = "전송 하시겠습니까?.";
iconst.SEND_CONFIRM     = "전송 하였습니다.";

// 종료메시지
iconst.END_CONFIRM     = "종료 하였습니다.";
iconst.END_FAILURE     = "종료를 실패하였습니다.";

iconst.INSERT_QUESTION      = "등록 하시겠습니까?";
iconst.UPDATE_QUESTION      = "수정 하시겠습니까?";
iconst.UPDATE1_QUESTION     = "변경 하시겠습니까?";
iconst.DELETE_QUESTION      = "삭제 하시겠습니까?";
iconst.CONFIRM_QUESTION     = "확정 하시겠습니까?";
iconst.CANCEL_QUESTION      = "취소 하시겠습니까?";
iconst.APPROVAL_QUESTION    = "승인 하시겠습니까?";
iconst.APPLY_QUESTION       = "신청 하시겠습니까?";
iconst.REPORT_QUESTION      = "출력 하시겠습니까?";
iconst.REJECT_QUESTION      = "추진중단 하시겠습니까?";
iconst.REJECT_QUESTION2     = "승인 거절하시겠습니까?";
iconst.TERMINATE_QUESTION   = "해지 하시겠습니까?";
iconst.CHARGE_QUESTION      = "배정 하시겠습니까?";
iconst.CHARGE1_QUESTION     = "담당자를 변경하시겠습니까?";
iconst.BATCH_QUESTION       = "일괄처리 하시겠습니까?";
iconst.NEXT_QUESTION        = "다음 단계로 진행하시겠습니까?";
iconst.DROP_QUESTION        = "DROP 하시겠습니까?";
iconst.RECA_QUESTION        = "철회 하시겠습니까?";
iconst.REPT_QUESTION        = "자체 발굴 등록하시겠습니까?";
iconst.RECT_QUESTION        = "접수 하시겠습니까?";
iconst.RETRIEVAL_QUESTION   = "회수 하시겠습니까?";
iconst.REDEPTION_QUESTION   = "상환 하시겠습니까?";
iconst.EXECUTION_QUESTION   = "실행 하시겠습니까?";

iconst.RECEIPT_QUESTION = "수납하시겠습니까?";
iconst.SALE_QUESTION   = "매각하시겠습니까?";
iconst.DRAMT_QUESTION   = "감액하시겠습니까?";
iconst.INSERT_COMPLETE  = "등록되었습니다!";
iconst.UPDATE_COMPLETE  = "수정되었습니다!";
iconst.CONFIRM_COMPLETE  = "확정되었습니다!";
iconst.CHANGE_COMPLETE = "변경되었습니다!";
iconst.DELETE_COMPLETE  = "삭제되었습니다!";
iconst.CANCEL_COMPLETE  = "취소되었습니다!";
iconst.APPROVAL_COMPLETE = "승인되었습니다!";
iconst.REJECT_COMPLETE  = "부결되었습니다!";
iconst.EXECUTION_COMPLETE   = "실행되었습니다!";
iconst.APPROVAL_CANCEL = "승인취소되었습니다.";
iconst.TERMINATE_COMPLETE = "해지되었습니다!";
iconst.PRINT_COMPLETE   = "출력되었습니다!";
iconst.CREATE_COMPLETE  = "생성되었습니다!";
iconst.APPLY_COMPLETE   = "신청되었습니다!";
iconst.CHARGE_COMPLETE   = "배정되었습니다!";
iconst.CHARGE1_COMPLETE   = "담당자가 변경되었습니다!";
iconst.BATCH_COMPLETE   = "일괄처리되었습니다!";
iconst.NEXT_COMPLETE   = "다음단계로 진행처리되었습니다!";
iconst.DROP_COMPLETE   = "DROP처리되었습니다!";
iconst.RECA_COMPLETE   = "철회처리되었습니다!";
iconst.REPT_COMPLETE   = "자체발굴 등록되었습니다!";
iconst.RECT_COMPLETE   = "접수되었습니다!";
iconst.RETRIEVAL_COMPLETE   = "회수되었습니다!";
iconst.SALE_COMPLETE   = "매각되었습니다.";
iconst.DATA_NOTFOUND    = "조회데이터가 없습니다!";
iconst.NOTFOUNDCUST = "등록된 고객정보가 없습니다."
iconst.NOTFOUNDACNO = "등록된 계좌정보가 없습니다."
iconst.NOTFOUNDCNLN = "등록된 품의정보가 없습니다."
iconst.NOTFOUNDEMPL = "등록된 직원정보가 없습니다."
iconst.NOTFOUNDBRNC = "등록된 부점정보가 없습니다."
iconst.NOTFOUNDZPCD = "등록된 우편번호가 없습니다."
iconst.CANNOTINSERT = "등록할 수 없습니다.\n초기화버튼 클릭후 등록해주시기바랍니다."
iconst.NOSEARCHPARAM = "검색조건을 입력해 주십시오.";
iconst.INVALIDICNUMBER = "IC카드 비밀번호가번호가 잘못되었습니다.";
iconst.OPCLEND = "업무마감되었습니다.";

iconst.MALFORMEDEMAIL = "이메일 형식이 맞지 않습니다.";
iconst.OPCLEND_QUESTION = "마감하시겠습니까?";
iconst.OPCLSTART_QUESTION = "업무개시하시겠습니까?";
iconst.OPCLSTART = "업무개시 하였습니다.";
iconst.OPCLSTART_CONFIRM_BIZDAY = "해당일은 영업일이 아닙니다. 정말 업무개시하시겠습니까?";
iconst.OPCLSTART_CONFIRM_PREVDAY = "해당일은 현재보다 이전날짜입니다. 정말 업무개시하시겠습니까?";

/* ==================================================================== */
/*   2. istring 구현부                                                  */
/* ==================================================================== */

/* isEmpty
 * 문자값이 존재하는 지에 대해 검사하는 함수
 *
 * @param   string
 * @return  boolean
 */
istring.isEmpty = function(str)
{
    if (str == null || istring.trim(str) == "" || typeof str == 'undefined')
    {
        return  true;
    }
    return  false;
}

/* nvlString
 * 문자열의 값이 null이면 "" 반환 또는 기본설정 값 반환
 * @param   string
 * @return  string
 */
istring.nvlString = function(val)
{
    if (istring.isEmpty(val))
    {
        if (arguments.length == 2)
        {
            return arguments[1];
        }
        else
        {
            return "";
        }
    }
    else
    {
        return val;
    }
}
/*
 * ltrim
 * 문자열 좌측 공백제거
 *
 * @param   string
 * @return  string
 */
istring.ltrim = function(text)
{
    if (text == "")
    {
        return  text;
    }

    var len = text.length;
    var st  = 0;

    while ((st < len) && (text.charAt(st) <= ' '))
    {
        st++;
    }

    return  (st > 0) ? text.substring(st, len) : text;
}

/*
 * rtrim
 * 문자열 우측 공백제거
 *
 * @param   string
 * @return  string
 */
istring.rtrim = function(text)
{
    if (text == "")
    {
        return  text;
    }

    var len = text.length;
    var st  = 0;

    while ((st < len) && (text.charAt(len - 1) <= ' '))
    {
        len--;
    }

    return  (len < text.length) ? text.substring(st, len) : text;
}

/*
 * trim
 * 문자열 좌우측 공백제거
 *
 * @param   string
 * @return  string
 */
istring.trim = function(text)
{
    if (text ==null || text == "")
    {
        return  text;
    }

    var len = text.length;
    var st  = 0;

    while ((st < len) && (text.charAt(st) <= ' '))
    {
        st++;
    }

    while ((st < len) && (text.charAt(len - 1) <= ' '))
    {
        len--;
    }

    return  ((st > 0) || (len < text.length)) ? text.substring(st, len) : text;
}

/*
 * lpad
 * 문자열의 좌측을 특정문자로 채워 특정 길이의 문자열을 만든다.
 *
 * @param   string
 * @param   length
 * @param   padstring
 * @return  string
 */
istring.lpad = function(str, num, padstr)
{
    if (istring.isEmpty(padstr))
    {
        return str;
    }

    var tempstr = "";
    for (var i=0; i<num; i++)
    {
        tempstr += padstr;
    }

    tempstr += str;

    return  tempstr.substring(tempstr.length - num, tempstr.length);
}

/*
 * rpad
 * 문자열의 우측을 특정문자로 채워 특정 길이의 문자열을 만든다.
 *
 * @param   string
 * @param   length
 * @param   padstring
 * @return  string
 */
istring.rpad = function(str, num, padstr)
{
    if (istring.isEmpty(padstr))
    {
        return str;
    }

    var tempstr = "";
    for (var i=0; i<num; i++)
    {
        tempstr += padstr;
    }

    tempstr = str + tempstr;

    return  tempstr.substring(0, num);
}

/*
 * getByteLength
 * 문자열의 byte length를 얻는다.
 *
 * @param   string
 * @return  byte length
 */
istring.getByteLength = function(str)
{
    if (str == "")
    {
        return  0;
    }

    var len = 0;

    for (var i = 0; i < str.length; i++)
    {
        if (str.charCodeAt(i) > 128)
        {
            len++;
        }
        len++;
    }

    return  len;
}

/*
 * isEnglish
 * 영문,숫자만 입력 되었는지 확인한다.
 *
 * @param   string
 * @return  boolean
**/
istring.isEnglish = function(str)
{
    for (var i=0; i<str.length; i++)
    {
        if ((str.charCodeAt(i) > 0x3130 && str.charCodeAt(i) < 0x318F) || (str.charCodeAt(i) >= 0xAC00 && str.charCodeAt(i) <= 0xD7A3))
        {
            return false;
        }
    }
    return true;
}

/*
 * isEnglish
 * 영문만 입력 되었는지 확인한다.
 *
 * @param   string
 * @return  boolean
**/
istring.isEnglishNoNumber = function(str)
{
    for (var i=0; i<str.length; i++)
    {
        if ( !((str.charAt(i) >='a' && str.charAt(i)<='z') || ( str.charAt(i)>='A' && str.charAt(i)<='Z' )))
        {
            return false;
        }
    }
    return true;
}
/*
 * isKorean
 * 한글만 입력 되었는지 확인한다.
 *
 * @param   string
 * @return  boolean
**/
istring.isKorean = function(str)
{
    for (var i=0; i<str.length; i++)
    {
        if (!((str.charCodeAt(i) > 0x3130 && str.charCodeAt(i) < 0x318F) || (str.charCodeAt(i) >= 0xAC00 && str.charCodeAt(i) <= 0xD7A3)))
        {
            return false;
        }
    }
    return true;
}

//문자열에서 숫자가 존재하면 true, 문자만 있다면 false 반환
istring.isExistNum = function(str)
{
    if(str == null || str == '' || str == undefined)
        return false;

    for( var i = 0; i < str.length; i++)
    {
        //문자면 트루, 숫자면 펄스
        if(!isNaN(parseInt(str.charAt(i))))
            return true;
    }
    return false;
}


/*
 * deletePatternEvt
 * 문자열에서 패턴 문자열을  삭제한다.
 *
 * @param Event 객체
 */
istring.deletePatternEvt = function()
{
    var obj = window.event.srcElement;
    istring.deletePatternObj(obj);
    obj.select();
}

/*
 * deletePatternObj
 * 문자열에서 패턴을 삭제한다.
 *
 * @param  Object
 * @param  pattern
 */

istring.deletePatternObj = function(obj, pattern)
{
   return obj.value = istring.deletePattern(obj.value, pattern);
}


/*
 * deletePattern
 * 문자열에서 패턴을 삭제한다.
 *
 * @param   string
 * @param   string
 * @return  string
 */
istring.deletePattern = function(str, pattern)
{
    var temp = '';
    str = String(str);

    if (pattern == null  ||  pattern == "")
        pattern = iconst.SEP_DATE;

    for (var i = 0; i <= str.length - pattern.length ; i++)
    {
        if (str.substring(i, i + pattern.length) == pattern)
        {
            i = i + pattern.length - 1;
            continue;
        }
        else
        {
            temp += str.charAt(i);
        }
    }

    return  temp;
}

/*
 * limitLength
 * 탭 이름의 길이를 MaxTextByte로 제한하여 자른다.
 *
 * @param   str
 * @return   string
 */
var MaxTextByte = 10;
istring.limitLength = function(str, pattern)
{
    var byteSize = getByteLength(str);
    if(pattern == null || istring.trim(pattern) == "" || typeof pattern == 'undefined' )
        pattern = "…";

    if(byteSize > MaxTextByte)
    {
        var subStr = subByte(str, 0, MaxTextByte) + LimitPattern;
        return subStr;
    }
    else
        return str;
}

/*
 * subByteObj
 * 문자열에서 패턴을 삭제한다.
 *
 * @param  Object
 * @param  pattern
 */

istring.subByteObj = function(obj, len)
{
    obj.value = istring.subByte(obj.value, 0, len);
}

/*
 * subByte
 * string을 지정한 범위의 byte길이만큼 자른다.
 *
 * @param   str   문자열
 * @param   start 시작 위치
 * @param   end   끝위치
 * @return   string
 */
istring.subByte = function(str, start, end)
{
    var reLength = 0;
    var sReturn ="";
    var i;

    if(str==null)
        return null;

    for(i=0; i<str.length; i++)
    {
        if(reLength<start)
            continue;
        if(reLength>=end)
            break;

        sReturn+=str.substring(i, i+1);

        var one=str.charCodeAt(i);
        if(one>999)
            reLength+=2;
        else
            reLength++;
    }

    return sReturn;
}
/*
 * byteLength
 * string의 byte 길이를 리턴한다.
 *
 * @param   str   문자열
 * @return  int
 */
istring.byteLength = function(str)
{
    var reLength = 0;

    if(str==null)
        return reLength;

    for(var i=0; i<str.length; i++)
    {
        var one=str.charCodeAt(i);
        if(one>999)
            reLength+=2;
        else
            reLength++;
    }

    return reLength;
}

/* ==================================================================== */
/*   3. inumber 구현부                                                  */
/* ==================================================================== */

/*
 * isNumber
 * 오직 숫자로만 이루어져 있는지 체크 한다.(음수,소수점 허용)
 *
 * @param   string
 * @return  boolean
 */
inumber.isNumber = function(num)
{
    var validPattern  = /^[\+-]?\d+[.]?\d*$/;
    return  validPattern.test(num);
}

/*
 * isInteger
 * 정수 체크
 *
 * 1. +, - 부호를 생략하거나 넣을 수 있다 : ^[\+-]?
 * 2. 0에서 9까지 숫자가 0번 이상 올 수 있다 : [0-9]*
 * 3. 마지막은 숫자로 끝나야 한다 : [0-9]$
 *
 * @param   string
 * @return  boolean
 */
inumber.isInteger = function(num)
{
    var validPattern   = /^[\+-]?[\d]+$/;
    return  validPattern.test(num);
}

/*
 * isFloat
 * 유리수 체크
 *
 * 1. +, - 부호를 생략하거나 넣을 수 있다 : ^[\+-]?
 * 2. 0에서 9까지 숫자가 0번 이상 올 수 있다 : [0-9]*
 * 3. 소수점을 넣을 수 있다 : [.]?
 * 4. 소수점 이하 자리에 0에서 9까지 숫자가 올 수 있다 : [0-9]*
 * 5. 마지막은 숫자로 끝나야 한다 : [0-9]$
 *
 * @param   string
 * @return  boolean
 */
inumber.isFloat = function(num)
{
    //var validPattern = /^[\+-]?[\d]+[.]?[\d]+$/;
    var validPattern = /^[\+-]?[0-9]*[.]?[0-9]*[0-9]$/;
    return  validPattern.test(num);
}

/*
 * addComma
 * 숫자에 comma를 붙인다.
 *
 * @param   string
 * @param   int (len 소수점 아래자리까지 표현)
 */
inumber.addComma = function(str, len)
{
    var rxSplit = new RegExp('([0-9])([0-9][0-9][0-9][,.])');
    var zero = "0000000000";
    if (len > 0 && str == Math.ceil(str))
    {
        if (str > 0)
        {
            str += ".";
        }
    }

    if ((typeof str) == "number")
    {
        str += "";
    }

    var arrNumber = str.split('.');
    arrNumber[0] += '.';
    do
    {
        arrNumber[0] = arrNumber[0].replace(rxSplit, '$1,$2');
    }
    while (rxSplit.test(arrNumber[0]));

    if (arrNumber.length > 1)
    {
        if (arrNumber[1].length < len)
        {
            arrNumber[1] += zero.substring(0, (len - arrNumber[1].length));
        }

        replaceStr = arrNumber.join("");
    }
    else
    {
        replaceStr = arrNumber[0].split(".")[0];
    }

    return  replaceStr;
}

/*
 * addCommaObj
 * 숫자에 comma를 붙인다.
 *
 * @param   Object
 */
inumber.addCommaObj = function(obj)
{
    obj.value = istring.trim(obj.value);
    var value = obj.value;

    if (value == "")
    {
        return;
    }

    value = istring.deletePattern(value,",");
    if (!inumber.isFloat(value))
    {
        iutil.DataTypeError(obj);
        obj.value = "0";
        return;
    }

    obj.value = inumber.addComma(value);
}

/*
 * addCommaEvt
 * 이벤트 객체의 숫자형 값에 comma를 붙인다.
 *
 * @param event 객체
 */
inumber.addCommaEvt = function()
{
    var obj = window.event.srcElement;
    inumber.addCommaObj(obj);
}

/*
 * deleteComma
 * 숫자에서 comma를 없앤다.
 *
 * param string
 * return string
 */
inumber.deleteComma = function(str)
{
    if ( str=="" || str==null ) return str;
    return istring.deletePattern(str, ",");
}


/*
 * deleteCommaObj
 * 숫자에서 comma를 없앤다.
 *
 * param Object
 */
inumber.deleteCommaObj = function(obj)
{
    obj.value = istring.deletePattern(obj.value, ",");
}

/*
 * deleteCommaEvt
 * 숫자에서 comma를 없앤다.
 *
 * @param event 객체
 */
inumber.deleteCommaEvt = function()
{
    var obj = window.event.srcElement;
    inumber.deleteCommaObj(obj);
    obj.select();
}


/*
 * addPoint
 * 숫자에 point를 붙인다.
 *
 * @param   string
 * @param   int 전체길이  00.000 = 5자리
 * @param   int 고정 소수점
 */
inumber.addPoint = function(str, len, point)
{
    //0으로 채우기
    str = istring.lpad(str,len,"0");

    var format ="";
    for(i=0; i<=len ; i++)
    {
        if(i==len-point)
            format+=".";
        else
            format+="#";
    }
    str = iformat.addUserDefineFormat(str, format);

    return Number(str).toFixed(point);
}

/*
 * addPointObj
 * 숫자에 Point를 붙인다.
 *
 * @param   Object
 */
inumber.addPointObj = function(obj)
{
    obj.value = istring.trim(obj.value);
    var sValue = obj.value;
    var nValue = new Number(sValue);
    var minValue    = obj.getAttribute("minValue");
    var maxValue    = obj.getAttribute("maxValue");

    if (sValue == "")
    {
        return;
    }

    if(sValue.indexOf('.')>-1)  //소수점 형태이면
    {
        nValue = nValue.toFixed(minValue.length - minValue.indexOf(".")-1);//셋째자리로 셋팅
    }

    sValue = istring.deletePattern(nValue,"."); //정수형으로 변환

    if (!inumber.isFloat(sValue))
    {
        iutil.DataTypeError(obj);
        obj.value = minValue;
        return;
    }
    obj.value = inumber.addPoint(sValue, obj.maxLength,
                minValue.length - minValue.indexOf(".")-1);
}

/*
 * addPointEvt
 * 이벤트 객체의 숫자형 값에 Point를 붙인다.
 *
 * @param event 객체
 */
inumber.addPointEvt = function()
{
    var obj = window.event.srcElement;
    inumber.addPointObj(obj);
}

/*
 * deletePoint
 * 숫자에서 Point를 없앤다.
 *
 * param string
 * return string
 */
inumber.deletePoint = function(str)
{
    if ( str=="" || str==null ) return str;
    return istring.deletePattern(str, ".");
}

/*
 * deletePointObj
 * 숫자에서 Point를 없앤다.
 *
 * param Object
 */
inumber.deletePointObj = function(obj)
{
    obj.value = inumber.deletePoint(obj.value);
}

/*
 * deletePointEvt
 * 숫자에서 Point를 없앤다.
 *
 * @param event 객체
 */
inumber.deletePointEvt = function()
{
    var obj = window.event.srcElement;
    inumber.deletePointObj(obj);
    obj.select();
}

/*
 * nvlNumber
 * 숫자이면 숫자, 숫자가 아니면 0
 *
 * @param   string
 * @return  int

 */
inumber.nvlNumber = function(val)
{
    if (!Number(val))
        val   = 0;
    return  Number(val);
}
/*
 * getNumber
 * 지정한 필드의 값을 포멧을 제거한후 숫자로 돌려준다.
 *
 * @param   string
 * @return  int

 */
inumber.getNumber = function(obj)
{
    var val = parseFloat(inumber.nvlNumber(istring.deletePattern(obj,",")));
    return  val;
}

/*
 * addCurrencyEvt
 * 이벤트 객체의 숫자형 값에 comma를 붙인다.
 *
 * @param event 객체
 */
inumber.addCurrencyEvt = function()
{
    var obj = window.event.srcElement;
    inumber.addCurrencyObj(obj);
}

/*
 * addPointObj
 * 숫자에 Point를 붙인다.
 *
 * @param   Object
 */
inumber.addCurrencyObj = function(obj)
{
    var currency = obj.getAttribute("currency");
	if( currency != null )
	{
		var precisionCnt = 2;
		var upperCurrency = currency.toUpperCase();
		if ( upperCurrency == "VND" || upperCurrency == "BEF"
		  || upperCurrency == "ITL"  || upperCurrency == "ESP"
		  || upperCurrency == "KRW"  || upperCurrency == "JPY" )
		{
			precisionCnt = 0;
		}else if ( upperCurrency == "USD" || upperCurrency == "GBP"
		  || upperCurrency == "EUR"  || upperCurrency == "DEM"
		  || upperCurrency == "FRF"  || upperCurrency == "CHF"
		  || upperCurrency == "HKD"  || upperCurrency == "CAD"
		  || upperCurrency == "AUD"  || upperCurrency == "NLG"
		  || upperCurrency == "DKK"  || upperCurrency == "SAR"
		  || upperCurrency == "AED"  || upperCurrency == "ATS"
		  || upperCurrency == "NOK"  || upperCurrency == "SEK"
		  || upperCurrency == "SGD"  || upperCurrency == "MYR"
		  || upperCurrency == "NZD"  || upperCurrency == "FIM"
		  || upperCurrency == "IDR"  || upperCurrency == "THB"
		  || upperCurrency == "MXN"  || upperCurrency == "CLP"
		  || upperCurrency == "CNY"  || upperCurrency == "INR" )
		{
			precisionCnt = 2;
		}else if ( upperCurrency == "KWD" || upperCurrency == "BHD" )
		{
			precisionCnt = 3;
		}else{
			precisionCnt = 0;
		}
		obj.value = inumber.decimalForamt(obj.value, precisionCnt);
	}
}

/*
 * formatFloat
 * 지정한 소수점 갯수만큼 표현한다.
 * 예를 들어 파라미터로 3.1,3 를 입력할 경우 3.100 이 리턴된다.
 *
 * @param   float
 * @param   aPrecision		소수점 갯수
 * @return

 */
inumber.decimalForamt = function(aFloat, aPrecision){
	try {
		aFloat = aFloat + '';
		aFloat = aFloat.replace(/,/g,"");
		if( inumber.isFloat(aPrecision) ){
			precision = aPrecision;
		}
	} catch(e) {
		precision = 2;	//default 2
	}
	try {
		number = parseFloat(aFloat);
		if(isNaN(number))
			return "0";
	} catch(e) {
		return "0";
	}
	return inumber.addComma(number.toFixed(precision));
}

inumber.addNumberCommaEvt = function()
{
	var obj = window.event.srcElement;
	obj.value = istring.trim(obj.value);
    var value = obj.value;

    if (value == "")
    {
        return;
    }

    value = istring.deletePattern(value,",");
    obj.value = inumber.addComma(value);
}

inumber.isIntegerNotUseComma = function(num)
{
    regexp = /^[-]?\d*$/;				//콤마없는 정수(0~9)
    if(num.search(regexp)==-1)
		return false;
	return true;
}

inumber.isIntegerUseComma = function(num)
{
	regexp = /^[-]?[\d,]*$/;			//콤마있는 정수(0~9)
    if(num.search(regexp)==-1)
		return false;
	return true;
}

inumber.isNumberNotUseComma = function(num)
{
    regexp = /^\d*(\.?\d*)$/;			//콤마없는 숫자 소수점
    if(num.search(regexp)==-1)
		return false;
	return true;
}

inumber.isNumberUseComma = function(num)
{
	regexp = /^[\d,]*(\.?\d*)$/;		//콤마있는 숫자 소수점
    if(num.search(regexp)==-1)
		return false;
	return true;
}

// 2009.11.05
inumber.isNumberUseCommaMinus = function(num)
{
	regexp = /^[\d,-]*(\.?\d*)$/;		//콤마, 마이너스 있는 숫자 소수점
    if(num.search(regexp)==-1)
		return false;
	return true;
}


inumber.isDoubleNotUseComma = function(num)
{
    regexp = /^[+-]?\d*(\.?\d*)$/;		//콤마없는 숫자 소수점
    if(num.search(regexp)==-1)
		return false;
	return true;
}

inumber.isDoubleUseComma = function(num)
{
	regexp = /^[+-]?[\d,]*(\.?\d*)$/;	//콤마있는 숫자 소수점
    if(num.search(regexp)==-1)
		return false;
	return true;
}

inumber.isFloatNotUseComma = function(num)
{
    regexp = /^[+-]?\d*(\.?\d*)$/;		//콤마없는 숫자 소수점
    if(num.search(regexp)==-1)
		return false;
	return true;
}

inumber.isFloatUseComma = function(num)
{
	regexp = /^[+-]?[\d,]*(\.?\d*)$/;	//콤마있는 숫자 소수점
    if(num.search(regexp)==-1)
		return false;
	return true;
}


/* ==================================================================== */
/*   4. idate 구현부                                                    */
/* ==================================================================== */

/*
 * getLastDay
 * 해당 월의 마지막 일을 가져온다.
 *
 * @param YYYY
 * @param MM
 * @return DD
 */
idate.getLastDay = function(dateY, mm)
{
    var m = parseInt(mm,10) - 1;
    var d;

    var end = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
    if ((dateY % 4 == 0 && dateY % 100 != 0) || dateY % 400 == 0)
    {
        end[1] = 29;
    }
    for (var i=0; i<end.length; i++)
    {
        if(m == i)
            d = end[i];
    }
    return d;
}

/*
 * getLastDay2
 * 말일 조회
 *
 * @param YYYYMMDD
 * @return YYYYMMDD
 */
idate.getLastDay2 = function( toDate )
{
    var year = toDate.substring(0,4);
    var month = toDate.substring(4,6);
    var day = toDate.substring(6,8);
    var rtnLastDay = "";
    if( month == "01" || month == "03" ||
        month == "05" || month == "07" ||
        month == "08" || month == "10" ||
        month == "12")
        rtnLastDay = "31";
    else if(month == "04" || month == "06" ||
            month == "09" || month == "11")
        rtnLastDay = "30";
    else
    {
        if ((year%4 == 0) && ((year%100 != 0) || (year%400 == 0)))
            rtnLastDay = "29";
        else
            rtnLastDay = "28";
    }
    return rtnLastDay;
}
/*
 * addYears
 * 일자에 년수 더하기
 *
 * @param   YYYYMMDD -   일자(문자열)
 * @param   offset   -   년수
 * @return  YYYYMMDD -   일자(문자열,dateYMD)
 */
idate.addYears = function(date1, offset)
{
    if (!idate.isDateYMD(date1))
    {
        return  date1;
    }

    var year    = eval(date1.substring(0, 4));
    var month   = eval(date1.substring(4, 6));
    var day     = eval(date1.substring(6, 8));

    var date2   = new Date(year + eval(offset), month - 1, day);

    return  istring.lpad("" +   date2.getFullYear()     , 4, "0")   +
            istring.lpad("" +   (date2.getMonth() + 1)  , 2, "0")   +
            istring.lpad("" +   date2.getDate()         , 2, "0")   ;
}


/*
 * addMonths
 * 일자에 월수 더하기
 *
 * @param   YYYYMMDD -  일자(문자열)
 * @param   offset   -  월수
 * @return  YYYYMMDD -  일자(문자열,dateYMD)
 */
idate.addMonths = function(date1, offset)
{
    if (!idate.isDateYMD(date1))
    {
        return  date1;
    }

    var year    = eval(date1.substring(0, 4));
    var month   = eval(date1.substring(4, 6));
    var day     = eval(date1.substring(6, 8));

    var date2   = new Date(year, month + eval(offset) - 1, day);

    return  istring.lpad("" +   date2.getFullYear()     , 4, "0")   +
            istring.lpad("" +   (date2.getMonth() + 1)  , 2, "0")   +
            istring.lpad("" +   date2.getDate()         , 2, "0")   ;
}
/*
 * addDays
 * 일자에 일수 더하기
 *
 * @param   YYYYMMDD -  일자(문자열)
 * @param   offset   -  일수
 * @return  YYYYMMDD -  일자(문자열,dateYMdd)
 */
idate.addDays = function(date1, offset)
{
    if (!idate.isDateYMD(date1)) {
        return  date1;
    }

    var year    = eval(date1.substring(0, 4));
    var month   = eval(date1.substring(4, 6));
    var day     = eval(date1.substring(6, 8));

    var date2   = new Date(year, month - 1, day + eval(offset));

    return  istring.lpad("" +   date2.getFullYear()     , 4, "0")   +
            istring.lpad("" +   (date2.getMonth() + 1)  , 2, "0")   +
            istring.lpad("" +   date2.getDate()         , 2, "0")   ;
}

/*
 * minusDays
 * 일자에 일수 빼기
 *
 * @param   YYYYMMDD -  일자(문자열)
 * @param   offset   -  일수
 * @return  YYYYMMDD -  일자(문자열,dateYMdd)
 */
idate.minusDays = function(date1, offset)
{
    if (!idate.isDateYMD(date1)) {
        return  date1;
    }

    var year    = eval(date1.substring(0, 4));
    var month   = eval(date1.substring(4, 6));
    var day     = eval(date1.substring(6, 8));

    var date2   = new Date(year, month - 1, day - eval(offset));

    return  istring.lpad("" +   date2.getFullYear()     , 4, "0")   +
            istring.lpad("" +   (date2.getMonth() + 1)  , 2, "0")   +
            istring.lpad("" +   date2.getDate()         , 2, "0")   ;
}

/*
 * datesBetween
 * 일자 사이의 일수(음수가능)
 *
 * @param   date1(YYYYMMDD)  -  일자(문자열)
 * @param   date2(YYYYMMDD)  -  일자(문자열)
 * @return  일수(정수, date2 - date1)
 */
idate.datesBetween = function(date1, date2)
{
    var minMilli    = 1000      *   60;
    var horMilli    = minMilli  *   60;
    var dayMilli    = horMilli  *   24;

    if (!idate.isDateYMD(date1))
    {
        return  null;
    }
    if (!idate.isDateYMD(date2))
    {
        return  null;
    }

    var year1   = eval(date1.substring(0, 4));
    var month1  = eval(date1.substring(4, 6));
    var day1    = eval(date1.substring(6, 8));

    var bdate   = new Date(year1, month1 - 1, day1);

    var year2   = eval(date2.substring(0, 4));
    var month2  = eval(date2.substring(4, 6));
    var day2    = eval(date2.substring(6, 8));

    var edate   = new Date(year2, month2 - 1, day2);

    return  Math.round((edate - bdate) / dayMilli);
}
/*
 * monthsBetween
 * 일자 사이의 월수(음수가능)
 *
 * @param   date1(YYYYMMDD) -   일자(문자열)
 * @param   date2(YYYYMMDD) -   일자(문자열)
 * @return  월수(실수, date2 - date1)
 */
/*idate.monthsBetween = function(date1, date2)
{
    if (!idate.isDateYMD(date1))
    {
        return  null;
    }
    if (!idate.isDateYMD(date2))
    {
        return  null;
    }

    var year1   = eval(date1.substring(0, 4));
    var month1  = eval(date1.substring(4, 6));
    var day1    = eval(date1.substring(6, 8));

    var sdate   = new Date(year1, month1 - 1, day1);

    var year2   = eval(date2.substring(0, 4));
    var month2  = eval(date2.substring(4, 6));
    var day2    = eval(date2.substring(6, 8));

    var edate   = new Date(year2, month2 - 1, day2);

    year1   = sdate.getFullYear();
    month1  = sdate.getMonth()  +   1;

    year2   = edate.getFullYear();
    month2  = edate.getMonth()  +   1;

    var months  = (year2    *   12  +   month2) -   (year1  *   12  +   month1);
    var days    = idate.datesBetween(idate.addMonths(date1, months), date2);

    return  Math.floor( months + (days / 31) );
}*/

/**
 * 두 날짜가  몇 개월 차이나는지 구함
 * date1이 date2보다 크면(미래면) minus(-)
 */
idate.monthsBetween = function(date1, date2){
    if (!idate.isDateYMD(date1))
    {
        return  null;
    }
    if (!idate.isDateYMD(date2))
    {
        return  null;
    }

    var year1   = eval(date1.substring(0, 4));
    var month1  = eval(date1.substring(4, 6));
    var day1    = eval(date1.substring(6, 8));

    var sdate   = new Date(year1, month1 - 1, day1);

    var year2   = eval(date2.substring(0, 4));
    var month2  = eval(date2.substring(4, 6));
    var day2    = eval(date2.substring(6, 8));

    var edate   = new Date(year2, month2 - 1, day2);

    var years  = edate.getFullYear() - sdate.getFullYear();
    var months = edate.getMonth() - sdate.getMonth();
    var days   = edate.getDate() - sdate.getDate();

    return (years * 12 + months + (days >= 0 ? 0 : -1) );
}

/*
 * getIntervalMonth
 * 기준일부터 특정일자 이전(0), 이후(1)의 개월수 만큼 차이나는 날짜를 리턴한다.(YYYYMMDD)
 *
 * @param  YYYYMMDD     - 기준 날짜
 * @param  term         - 개월수
 * @param  0 or 1       - 0이면 이전, 1이면 이후
 * @return YYYYMMDD     - 기준일부터 일정한 개월수를 더하거나 뺀 날짜
 */
idate.getIntervalMonth = function(kijunDate, term, isPrevNext)
{
    var kijunDate   = istring.deletePattern(kijunDate, iconst.SEP_DATE );
    var year        = kijunDate.substring(0,4); /* 년 */
    var month       = kijunDate.substring(4,6); /* 월 */
    var date        = kijunDate.substring(6,8); /* 일 */
    var addMonth;
    var addYear;
    var tempYear;
    var tempMonth;
    var rtnDate;

    if(isPrevNext == "0") /* 이전 */
    {
        addMonth    = eval(month) - eval(term);
        addYear     = Math.floor(eval(addMonth/12)); /* 빼줄 년도 계산 */
        tempYear    = eval(addYear) + eval(addMonth%12);
        if(tempYear > 0)
        {
            tempMonth   = eval(tempYear%13);
        }
        else
        {
            tempMonth   = eval(12 + addMonth%12);
            if(tempYear == 0)
                addYear     = addYear-1;
        }
    }
    else /* 이후 */
    {
        addMonth    = eval(month) + eval(term);
        addYear     = Math.floor(eval(addMonth/13)); /* 더해줄 년도 계산 */
        tempYear    = eval(addYear) + eval(addMonth%13);

        if(tempYear < 13)
        {
            tempMonth   = eval(tempYear%13);
        }
        else
        {
            tempMonth   = eval(tempYear%13 +1);
            addYear     = addYear+1;
        }
    }

    /* 길이를 알아보기위해 string으로 바꿔줌. */
    tempMonth   = tempMonth + "";
    if(tempMonth.length == 1)
    {
        tempMonth = "0" + tempMonth;
    }
    /* 해당월에 해당일이 존재하는지 체크하고 존재하지 않는다면 마지막 일을 가져온다. */
    if( !idate.isValidDay(eval(year) + eval(addYear), tempMonth, date))
        date = idate.getLastDay(eval(year) + eval(addYear), tempMonth);

    rtnDate = eval(year) + eval(addYear) +""+ tempMonth +""+ date;

    return rtnDate;
}
/*
 * getToday
 *오늘 날짜
 *
 * @return YYYYMMDD
 */
idate.getToday = function()
{
    var today = new Date();
    var year = today.getFullYear();
    var month = today.getMonth()+1;
    var day = today.getDate();
    if(month<10)
        month="0"+month;
    if(day<10)
        day="0"+day;
    return year+""+month+""+day;
}
/*
 * getTommorow
 *내일 날짜
 *
 * @return YYYYMMDD
 */
idate.getTommorow = function()
{
    var today = new Date();
    var year = today.getFullYear();
    var month = today.getMonth()+1;
    var day = today.getDate()+1;
    if(month<10)
        month="0"+month;
    if(day<10)
        day="0"+day;
    return year+""+month+""+day;
}
/* -------------------------------------------------------------------- */

/*
 * isValidDay
 * 유효한(존재하는) 일(日)인지 체크
 *
 * @param   YYYY    - 년
 * @param   MM      - 월
 * @param   DD      - 일
 * @return  boolean
 */
idate.isValidDay = function(yyyy, mm, dd)
{
    var m = parseInt(mm,10) - 1;
    var d = parseInt(dd,10);

    var end = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
    if ((yyyy % 4 == 0 && yyyy % 100 != 0) || yyyy % 400 == 0)
    {
        end[1] = 29;
    }

    return (d >= 1 && d <= end[m]);
}

/*
 * isDateYM
 * 날짜 체크
 *
 * @param   date(YYYYMM)
 * @return  boolean
 */
idate.isDateYM = function(dateM)
{
    if (dateM == null || dateM.length != 6)
    {
        return  false;
    }

    if ( !inumber.isInteger(dateM) )
    {
        return  false;
    }

    var year = eval(dateM.substring(0, 4));
    var month = eval(dateM.substring(4, 6));

    if (month < 1 || month > 12)
    {
        return  false;
    }

    return  true;
}

/*
 * isDateMD
 * 날짜 체크
 *
 * @param   date(MMDD)
 * @return  boolean
 */
idate.isDateMD = function(dateM)
{

    if (dateM == null || dateM.length != 4)
    {
        return  false;
    }

    if ( !inumber.isInteger(dateM) )
    {
        return  false;
    }

    var year = idate.getToday().substring(0, 4);

    var month = eval(dateM.substring(0, 2));

    var day = eval(dateM.substring(2, 4));

    if (month < 1 || month > 12)
    {
        return  false;
    }
	if ( day == 00)
	{
		return false;
	}
    var totalDays;

    switch (eval(month))
    {
        case 1 :
            totalDays   = 31;
            break;
        case 2 :
            if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0))
            {
                totalDays   = 29;
            }
            else
            {
                totalDays   = 28;
            }
            break;
        case 3 :
            totalDays   = 31;
            break;
        case 4 :
            totalDays   = 30;
            break;
        case 5 :
            totalDays   = 31;
            break;
        case 6 :
            totalDays   = 30;
            break;
        case 7 :
            totalDays   = 31;
            break;
        case 8 :
            totalDays   = 31;
            break;
        case 9 :
            totalDays   = 30;
            break;
        case 10 :
            totalDays   = 31;
            break;
        case 11 :
            totalDays   = 30;
            break;
        case 12 :
            totalDays   = 31;
            break;
    }

    if (day > totalDays)
    {
        return  false;
    }

    return  true;
}

/*
 * isDateYMD
 * 날짜 체크
 *
 * @param   date(YYYYMMDD)
 * @return  boolean
 */
idate.isDateYMD = function(date)
{
    if (date == null || date.length != 8)
    {
        return  false;
    }

    if (!inumber.isInteger(date))
    {
        return  false;
    }

    var year    = eval(date.substring(0, 4));
    var month   = eval(date.substring(4, 6));
    var day     = eval(date.substring(6, 8));

    if (month > 12 || month < 1)
    {
        return  false;
    }

	if ( day < 1 )
	{
		return false;
	}

    var totalDays;

    switch (eval(month))
    {
        case 1 :
            totalDays   = 31;
            break;
        case 2 :
            if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0))
            {
                totalDays   = 29;
            }
            else
            {
                totalDays   = 28;
            }
            break;
        case 3 :
            totalDays   = 31;
            break;
        case 4 :
            totalDays   = 30;
            break;
        case 5 :
            totalDays   = 31;
            break;
        case 6 :
            totalDays   = 30;
            break;
        case 7 :
            totalDays   = 31;
            break;
        case 8 :
            totalDays   = 31;
            break;
        case 9 :
            totalDays   = 30;
            break;
        case 10 :
            totalDays   = 31;
            break;
        case 11 :
            totalDays   = 30;
            break;
        case 12 :
            totalDays   = 31;
            break;
    }

    if (day > totalDays)
    {
        return  false;
    }

    return  true;
}


/*
 * addDateYMDFormat
 * 날짜 포멧 YYYY-MM-DD
 *
 * @param   YYYYMMDD
 * @return  YYYY-MM-DD
 */
idate.addDateYMDFormat = function(str)
{
    /* ""인경우 '--'로 출력되는것을 방지. */
    if (str == "")  return  str;

    return  str.substring(0, 4) + iconst.SEP_DATE + str.substring(4, 6) + iconst.SEP_DATE + str.substring(6, 8);
}

/*
 * addDateYMDFormatObj
 * 날짜 포멧
 *
 * @param   Object
 */
idate.addDateYMDFormatObj = function(obj)
{
    var value   = obj.value;

    if (istring.rtrim(value) == "")
    {
        return;
    }

    value   = istring.deletePattern( value , iconst.SEP_DATE );
    if (value.length == 4)
    {
        value   = (new Date()).getFullYear() + value;
    }
    if (!idate.isDateYMD(value))
    {
        iutil.DataTypeError(obj);
        return;
    }

    obj.value   = idate.addDateYMDFormat(value);
}

/*
 * addDateYMDFormatEvt
 * 날짜 포멧
 *
 * @param event 객체
 */
idate.addDateYMDFormatEvt = function()
{
    var obj = window.event.srcElement;
    idate.addDateYMDFormatObj(obj);
}


/*
 * deleteDateFormat
 * 날짜 포멧에서 포맷 문자제거
 *
 * @param YYYY-MM-DD
 * @return YYYYMMDD
 */
idate.deleteDateFormat = function(str)
{
    if( str=="" || str==null ) return str;
    return istring.deletePattern(str,iconst.SEP_DATE);
}

/*
 * deleteDateFormatObj
 * 날짜 포멧에서 포맷 문자제거
 *
 * @param object
 */
idate.deleteDateFormatObj = function(obj)
{
    obj.value = istring.deletePattern(obj.value,iconst.SEP_DATE);
}

/*
 * deleteDateFormatEvt
 * 날짜 포멧에서 포맷 문자제거
 *
 * event 객체
 */
idate.deleteDateFormatEvt = function()
{
    var obj = window.event.srcElement;
    idate.deleteDateFormatObj(obj);
    obj.select();
}

/*
 * isMonth
 * 숫자값이 월의 숫자에 해당하는지 확인
 *
 * @param   MM  -  0 ~ 12
 * @return  boolean
 */
idate.isMonth = function(month)
{
    if(month=="" || month==null) return false;

    if ( !inumber.isInteger(month) )
    {
        return  false;
    }

    if (month < 1 || month > 12)
    {
        return  false;
    }

    return  true;
}

/*
 * isMonthObj
 * object 객체의 숫자값이 월의 숫자에 해당하는지 확인
 *
 * @param   object
 */
idate.isMonthObj = function(obj)
{
    var value = obj.value;

    if (istring.rtrim(value) == "")
    {
        return;
    }

    //value = idate.deletedateFormat(value);

    if ( !idate.isMonth(value))
    {
        iutil.DataTypeError(obj);
        return;
    }

}

/*
 * isMonthEvt
 * 이벤트 객체의 숫자값이 월의 숫자에 해당하는지 확인
 *
 * event 객체
 */
idate.isMonthEvt = function()
{
    var obj = window.event.srcElement;
    idate.isMonthObj(obj);
}


/*
 * addDateYMFormat
 * 날짜(년월) 포맷
 *
 * @param   YYYYMM
 * @return  YYYY-MM
 */
idate.addDateYMFormat = function(str)
{
    if ( str=="" || str==null ) return str;
    return  str.substring(0, 4) + iconst.SEP_DATE +    str.substring(4, 6);
}

/*
 * addDateMDFormat
 * 날짜(월일) 포맷
 *
 * @param   MMDD
 * @return  MMDD
 */
idate.addDateMDFormat = function(str)
{
    if ( str=="" || str==null ) return str;
    return  str.substring(0, 2) + iconst.SEP_DATE +    str.substring(2, 4);
}

/*
 * addDateYMFormatObj
 * 날짜(년월) 포맷
 *
 * @param   object
 */
idate.addDateYMFormatObj = function(obj)
{
    var value   = obj.value;

    if (istring.rtrim(value) == "")
    {
        return;
    }

    value   =istring.deletePattern(value,iconst.SEP_DATE);

    if (!idate.isDateYMD(value + "01"))
    {
        iutil.DataTypeError(obj);
        return;
    }

    obj.value   = idate.addDateYMFormat(value);
}

/*
 * addDateMDFormatObj
 * 날짜(월일) 포맷
 *
 * @param   object
 */
idate.addDateMDFormatObj = function(obj)
{
    var value   = obj.value;

    if (istring.rtrim(value) == "")
    {
        return;
    }

    value   =istring.deletePattern(value,iconst.SEP_DATE);

    if (!idate.isDateMD(value))
    {
        iutil.DataTypeError(obj);
        return;
    }

    obj.value   = idate.addDateMDFormat(value);
}

/*
 * addDateYMFormatEvt
 * 날짜(년월) 포맷
 *
 * event 객체
 */
idate.addDateYMFormatEvt = function()
{
    var obj = window.event.srcElement;
    idate.addDateYMFormatObj(obj);
}

/*
 * addDateMDFormatEvt
 * 날짜(월일) 포맷
 *
 * event 객체
 */
idate.addDateMDFormatEvt = function()
{
    var obj = window.event.srcElement;
    idate.addDateMDFormatObj(obj);
}

/*
 * isYearObj
 * 날짜(년) 포맷 체크
 *
 * @param   object
 */
idate.isYearObj = function(obj)
{
    var value   = obj.value;

    if (istring.rtrim(value) == "")
    {
        return;
    }


    if (!idate.isDateYMD(value + "0101"))
    {
        iutil.DataTypeError(obj);
        return;
    }

}

/*
 * isYearEvt
 * 날짜(년) 포맷 체크
 *
 * event 객체
 */
idate.isYearEvt = function()
{
    var obj = window.event.srcElement;
    idate.isYearObj(obj);
}


/* ==================================================================== */
/*   5. itime 구현부                                                    */
/* ==================================================================== */

/*
 * isTime
 * 시간 형식인지 체크 한다.(HH24MI)
 *
 * @param   HH24MISS
 * @return  boolean
 */
itime.isTime = function(time)
{
    if (time.length != 6)
    {
        return  false;
    }
    if (!inumber.isInteger(time))
    {
        return  false;
    }

    var hour = eval(time.substring(0, 2));
    var minute = eval(time.substring(2, 4));
    var second = eval(time.substring(4, 6));

    if (hour < 0 || 24 <= hour)
    {
        return  false;
    }

    if (minute < 0 || 60 <= minute)
    {
        return  false;
    }
    if (second < 0 || 60 <= second)
    {
        return  false;
    }

    return  true;
}

/*
 * isDateTime
 * 날짜 시간 초 형식인지 체크 한다.YYYYMMDDHHMMSS
 *
 * @param   YYYYMMDDHHMMSS
 * @return  boolean
 */
itime.isDateTime = function(str)
{
    if (str.length != 14)
    {
        return  false;
    }

    if ( !idate.isDateYMD(str.substring(0, 8)))
    {
        return  false;
    }

    if (!itime.isTime(str.substring(8)))
    {
        return  false;
    }

    return  true;
}

/*
 * addDateTimeHMSFormat
 * 날짜 시간(초)에 구분자를 붙인다.
 *
 * @param  YYYYMMDDHHMISS
 * @return YYYY-MM-DD HH:MI:SS
 */
itime.addDateTimeHMSFormat = function(str)
{
    return  str.substring(0, 4) + iconst.SEP_DATE + str.substring(4, 6) + iconst.SEP_DATE + str.substring(6, 8) + " " +
        str.substring(8, 10) + iconst.SEP_TIME + str.substring(10, 12) + iconst.SEP_TIME + str.substring(12);
}

/*
 * addDateTimeHMSFormatObj
 * 날짜  시간(초)에 구분자를 붙인다.
 *
 * @param   object
 */
itime.addDateTimeHMSFormatObj = function(obj)
{
    var value = obj.value;

    if (istring.rtrim(value) == "")
    {
        return;
    }

    value = itime.deleteDateTimeFormat(value);

    if (!itime.isDateTime(value))
    {
        iutil.DataTypeError(obj);
        return;
    }
    obj.value = itime.addDateTimeHMSFormat(value);
}


/*
 * addDateTimeHMSFormatEvt
 * 날짜 시간(초)에 구분자를 붙인다.
 *
 * event 객체
 */
itime.addDateTimeHMSFormatEvt = function()
{
    var obj = window.event.srcElement;
    itime.addDateTimeHMSFormatObj(obj);
}

/*
 * addDateTimeHMFormat
 * 날짜 시간(초)에 구분자를 붙인다.
 *
 * @param   YYYYMMDD HHMI
 * @return  YYYY-MM-DD HH:MI
 */
itime.addDateTimeHMFormat = function(str)
{
    return  str.substring(0, 4) + iconst.SEP_DATE + str.substring(4, 6) + iconst.SEP_DATE + str.substring(6, 8) + " " +
        str.substring(8, 10) + iconst.SEP_TIME + str.substring(10) ;
}

/*
 * addDateTimeHMFormatObj
 * 날짜 시간에 구분자를 붙인다.
 *
 * @param   obj
 */
itime.addDateTimeHMFormatObj = function(obj)
{
    var value = obj.value;

    if (istring.rtrim(value) == "")
    {
        return;
    }

    value = itime.deleteDateTimeFormat(value);

    if (!itime.isDateTime(value+"00"))
    {
        iutil.DataTypeError(obj);
        return;
    }
    obj.value = itime.addDateTimeHMFormat(value);
}


/*
 * addDateTimeHMFormatEvt
 * 날짜 시간(초)에 구분자를 붙인다.
 *
 * event 객체
 */
itime.addDateTimeHMFormatEvt = function()
{
    var obj = window.event.srcElement;
    itime.addDateTimeHMFormatObj(obj);
}

/*
 * addTimeHMSFormat
 * 시간에 ":"를 붙인다. HHMISS -> HH:MI:SS
 *
 * @param   HHMISS
 * @return  HH:MI:SS
 */
itime.addTimeHMSFormat = function(str)
{
    if(str=="" || str==null) return str;
    else
    return  str.substring(0, 2) + iconst.SEP_TIME + str.substring(2, 4)+ iconst.SEP_TIME + str.substring(4, 6);
}

/*
 * addTimeHMSFormatObj
 * 시간에 ":"를 붙인다. HHMISS -> HH:MI:SS
 *
 * @param   object
 */
itime.addTimeHMSFormatObj = function(obj)
{
    var value = obj.value;

    if (istring.rtrim(value) == "")
    {
        return;
    }

    value = istring.deletePattern(value, iconst.SEP_TIME);

    if (!itime.isTime(value))
    {
        iutil.DataTypeError(obj);
        return;
    }

    obj.value = itime.addTimeHMSFormat(value);
}

/* addTimeHMSFormatEvt
 * 시간에 ":"를 붙인다. HHMISS -> HH:MI:SS
 *
 * event 객체
 */
itime.addTimeHMSFormatEvt = function()
{
    var obj = window.event.srcElement;
    itime.addTimeHMSFormatObj(obj);
}

/*
 * addTimeHMSFormat2
 * 시간에 ":"를 붙인다. HHMISS -> HH시MI분SS초
 *
 * @param   HHMISS
 * @return  HH시MI분SS초
 */
itime.addTimeHMSFormat2 = function(str)
{
  if(str=="" || str==null) return str;

  var strTemp = str.substring(0, 2) + "시 " + str.substring(2, 4) + "분 "+  str.substring(4, 6) + "초 ";

  return strTemp;
}

/*
 * addTimeHMFormat
 * 시간에 ":"를 붙인다. HHMI -> HH:MI
 *
 * @param   HHMI
 * @return  HH:MI
 */
itime.addTimeHMFormat = function(str)
{
    if(str=="" || str==null) return str;
    else
    return  str.substring(0, 2) + iconst.SEP_TIME + str.substring(2, 4);
}

/*
 * 시간에 ":"를 붙인다. HHMI -> HH:MI
 *
 * @param   object
 */
itime.addTimeHMFormatObj = function(obj)
{
    var value = obj.value;

    if (istring.rtrim(value) == "")
    {
        return;
    }

    value = istring.deletePattern(value, iconst.SEP_TIME);

    if (!itime.isTime(value+"00"))
    {
        iutil.DataTypeError(obj);
        return;
    }

    obj.value = itime.addTimeHMFormat(value);
}

/*
 * addTimeHMFormatEvt
 * 시간에 ":"를 붙인다. HHMI -> HH:MI
 *
 * event 객체
 */
itime.addTimeHMFormatEvt = function()
{
    var obj = window.event.srcElement;
    itime.addTimeHMFormatObj(obj);
}


/*
 * addTimeHMFormat2
 * 시간에 "00시00분"를 붙인다.
 *
 * @param   HHMI
 * @return  HH시MI분
 */
itime.addTimeHMFormat2 = function(str)
{
  if(str=="" || str==null) return str;

  var strTemp = str.substring(0, 2) + "시 " + str.substring(2, 4) + "분 ";

  return strTemp;
}

/*
 * deleteTimeFormat
 * 시간에서 ":"를 없앤다.
 *
 * @param   시간형 스트링                 (ex. HH:MI,HH:MI:SS )
 * @return  ':'문자를 제거한 시간형 스트링    (ex. HHMI,HHMISS    )
 */
 itime.deleteTimeFormat = function(str)
{
    if(str=="" || str==null) return str;
    return istring.deletePattern(str,iconst.SEP_TIME);
}

/*
 * deleteTimeFormat
 * 시간에서 ":"를 없앤다.
 *
 * @param   object
 */
 itime.deleteTimeFormatObj = function(obj)
{
    obj.value = istring.deletePattern(obj.value,iconst.SEP_TIME);
}

/*
 * deleteTimeFormatEvt
 * 시간에서 ":"를 없앤다.
 *
 * event 객체
 */
itime.deleteTimeFormatEvt = function()
{
    var obj = window.event.srcElement;
     itime.deleteTimeFormatObj(obj);
    obj.select();
}

/*
 * deleteDateTimeFormat
 * 날짜와 시간의 구분자를  없앤다.
 *
 * @param   구분자가 포함된 날짜와 시간(ex.YYYY-MM-DD HH:MI:SS,YYYY-MM-DD HH:MI)
 * @return  구분자가 제거된 날짜와시간(ex.YYYYMMDD HHMISS,YYYYMMDD HHMI)
 */
itime.deleteDateTimeFormat = function(str)
{
    var temp = '';

    for (var i = 0; i < str.length; i++)
    {
        if (str.charAt(i) == iconst.SEP_DATE)
        {
            continue;
        }
        else if (str.charAt(i) == ' ')
        {
            continue;
        }
        else if (str.charAt(i) == iconst.SEP_TIME)
        {
            continue;
        }
        else
        {
            temp += str.charAt(i);
        }
    }

    return  temp;
}

/*
 * deleteDateTimeFormatObj
 * 날짜 시간(초)에서 구분자를 없앤다.
 *
 * @param   object
 */
itime.deleteDateTimeFormatObj = function(obj)
{
    obj.value = itime.deleteDateTimeFormat(obj.value);
}

/*
 * deleteDateTimeFormatEvt
 * 날짜 시간(초)에서 구분자를 없앤다.
 *
 * event 객체
 */
itime.deleteDateTimeFormatEvt = function()
{
    var obj = window.event.srcElement;
    itime.deleteDateTimeFormatObj(obj);
    obj.select();
}


/* ==================================================================== */
/*   6. icookie 구현부                                                  */
/* ==================================================================== */

/*
 * setCookie
 * cookie 변수 설정
 */
icookie.setCookie = function()
{
    var argc = icookie.setCookie.arguments.length;
    var argv = icookie.setCookie.arguments;
    var toDay = new Date();
    var cookstr = "";

    var name = (argc > 0) ? argv[0] : null;
    var value = (argc > 1) ? argv[1] : null;
    var expires = null;
    if(argc > 2 && argv[2] != ""){
        var makeDay =  toDay.getDate() + argv[2];
        toDay.setDate(makeDay);
        expires = toDay.toGMTString();
    }
    var path = (argc > 3 && argv[3] != "") ? argv[3] : null
    var domain = (argc > 4 && argv[4] != "") ? argv[4] : null
    var secure = (argc > 5) ? argv[5] : false

    cookstr = name + "=" + escape(value);
    cookstr += (expires==null) ? "" : (";expires=" + expires);
    cookstr += (path==null) ? "" : (";path=" + path);
    cookstr += (domain==null) ? "" : (";domain=" + domain);
    cookstr += (secure==true) ? ";secure" : "";

    //alert(cookstr);
    document.cookie = cookstr;
}

/*
 * getCookie
 * cookie value를 리턴
 *
 * @param 쿠키 이름
 * @param 인덱스
 * @return 쿠키 값
 */
icookie.getCookie = function(name , index)
{
    var arrayIndex = -1;
    if  ( index != null && inumber.isNumber(index) ) arrayIndex = index;

    var cookieValue = document.cookie;

    if ( cookieValue == null ) return null;

    cookieValue = unescape(cookieValue);

    var cookieList = cookieValue.split("; ");
    var cookieElement = "";

    for(var i = 0; i < cookieList.length; i++)
    {
        cookieElement = cookieList[i].split("=");

        // find name
        if ( cookieElement[0] == name )
        {
               // exist value
               if(cookieElement.length < 1 ) return null;

               // not array
               if ( arrayIndex == - 1 ) return cookieElement[1];

               // array
               var arrayValue = cookieElement[1].split(";");

               if ( arrayValue.length < arrayIndex )
               {
                  alert('index over');
                   return null;
               }

               return arrayValue[ arrayIndex ];
        }
    }
    return null;
}

/*
 * deleteCookie
 * cookie 값 삭제
 *
 * @param 쿠키 이름
 */
icookie.deleteCookie = function(name)
{
    var today = new Date()

    today.setDate(today.getDate() - 1);
    var value = icookie.getCookie(name);
    if(value != "")
    {
        document.cookie = name + "=; expires=" + today.toGMTString()
    }
}


/* ==================================================================== */
/*   7. iwindow 구현부                                                  */
/* ==================================================================== */

var popupHtml = "/resource/html/PopUpLib.htm";
/*
 * openWindow
 * 일반 윈도우 창 열기
 *
 * @param   surl        -   URL
 * @param   sname       -   윈도우 명
 * @param   iwidth      -   너비
 * @param   iheight     -   높이
 * @param   sfeatures   -   윈도우 특성
 * @return  win         -   윈도우 객체
 */
iwindow.openWindow = function(surl, sname, iwidth, iheight, sfeatures)
{
    var svfeatures  = sfeatures;
    if (istring.isEmpty(sfeatures))
    {
        svfeatures  = "fullscreen=no,toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=no";
    }

    var itop    = (window.screen.availHeight    -   iheight)    /   2;
    var ileft   = (window.screen.availWidth     -   iwidth)     /   2;

    if (itop < 0)
    {
        itop    = 0;
    }
    if (ileft < 0)
    {
        ileft   = 0;
    }

    svfeatures  = svfeatures + ",left=" + ileft + ",top=" + itop + ",width=" + iwidth + ",height=" + iheight;

    var win = window.open(surl, sname, svfeatures);
    if (win) win.focus();
    return  win;
}

/*
 * openModalWindow
 * 모달 창 열기
 *
 * @param   surl        -   URL
 * @param   stitle      -   타이틀명
 * @param   vargs       -   인자
 * @param   iwidth      -   너비
 * @param   iheight     -   높이
 * @param   sfeatures   -   윈도우 특성
 * @return  returnValue
 */
iwindow.openModalWindow = function(surl, stitle, iwidth, iheight, vargs, sfeatures)
{
	if (/MSIE/.test(navigator.userAgent)) {
		if( navigator.appVersion.indexOf("MSIE 6.0") > 0 )
		{			
			iwidth = Number(iwidth) + 10;
			iheight = Number(iheight) + 55;
		}
	}

    var svfeatures  = '';

    if (istring.isEmpty(sfeatures))
    {
        svfeatures   = 'dialogHeight:' + iheight + 'px;';
        svfeatures  += 'dialogWidth:'  + iwidth  + 'px;';
        svfeatures  += 'scroll:0;help:0;status:1;center:1;';
    }
    else
    {
        svfeatures   = 'dialogHeight:' + iheight + 'px;';
        svfeatures  += 'dialogWidth:'  + iwidth  + 'px;';
        svfeatures  += sfeatures;
    }

    var param   = new iwindow.Popup();
    param.src   = surl;
    param.title = stitle;
	param.opener = window;
    param.args  = vargs;

    return window.showModalDialog(popupHtml, param, svfeatures);
}

/*
 * openModalessWindow
 * 모달리스 창 열기
 *
 * @param   surl        -   URL
 * @param   vargs       -   인자
 * @param   iwidth      -   너비
 * @param   iheight     -   높이
 * @param   sfeatures   -   윈도우 특성
 * @return  returnValue
 */
iwindow.openModalessWindow = function(surl, stitle, iwidth, iheight, vargs, sfeatures)
{
    var svfeatures  = '';

    if (istring.isEmpty(sfeatures))
    {
        svfeatures   = 'dialogHeight:' + iheight + 'px;';
        svfeatures  += 'dialogWidth:'  + iwidth  + 'px;';
        svfeatures  += 'scroll:0;help:0;status:0;center:1;';
    }
    else
    {
        svfeatures   = 'dialogHeight:' + iheight + 'px;';
        svfeatures  += 'dialogWidth:'  + iwidth  + 'px;';
        svfeatures  += sfeatures;
    }

    var param   = new iwindow.Popup();
    param.src   = surl;
    param.title = stitle;
	param.opener = window;
    param.args  = vargs;

    return  window.showModelessDialog(popupHtml, param, svfeatures);
}

/**
 * Popup
 * 팝업에 대한 정보 개체 생성할 때 사용
 */
iwindow.Popup = function() {
    var title   = "";
    var src     = "";
	var opener  = null;
    var args    = null;
}


/* ==================================================================== */
/*   8. iobject 구현부                                                  */
/* ==================================================================== */

/*
 * setFocus
 * 포커스 보내기
 *
 * @param   object or object name -   포커스 받을 개체 또는 개체 이름
 */
iobject.setFocus = function(obj)
{
    if (typeof (obj) == "object")
    {
        obj.focus();
    }
    else
    {
        var element = document.getElementById(obj);
        if (element)
        {
            element.focus();
        }
        else
        {
            var elements    = document.getElementsByName(obj);
            if (elements && elements.length)
            {
                elements[0].focus();
            }
        }
    }
}

/*
 * selectSetValue
 * 콤보 박스에 값을 세팅한다.
 *
 * @param   obj
 * @param   value
 */
iobject.selectSetValue = function(obj, value)
{
    if (obj)
    {
        if (obj.tagName == "SELECT")
        {
            for (var i = 0; i < obj.length; i++)
            {
                if (obj.options[i].value == value)
                {
                    obj.options[i].selected = true;
                    break;
                }
            }
        }
    }
}

/*
 * RadioSetValue
 * 라디오버튼 객체의 값을 세팅한다.
 *
 * @param   obj
 * @param   value
 */
iobject.RadioSetValue = function(obj, value)
{
    if (obj)
    {
        if (obj.length)
        {
            for (var i = 0; i < obj.length; i++)
            {
                if (obj[i].value == value)
                {
                    obj[i].checked  = true;
                    break;
                }
                else
				{
                    obj[i].checked  = false;
				}
            }
        }
        else
        {
            obj.checked = (obj.value == value);
        }
    }
}

/*
 * RadioGetValue
 * radio버튼의 선택한 값을 반환한다.
 *
 * @param objRadio - Radio버튼객체
 * @return val     - Radio버튼객체의 value
 */
iobject.RadioGetValue = function(objRadio)
{
    var val = "";
    if (objRadio.length)
    {
        for (var i=0; i<objRadio.length; i++)
        {
            if (objRadio[i].checked == true)
            {
                val = objRadio[i].value;
                break;
            }
        }
    }
    else
    {
        if (objRadio.checked)
        {
            val = objRadio.value;
        }
    }
    return  val;
}

/*
 * getFormValues
 * 폼내에 있는 객체의 이름과 값을 리턴
 *
 * @param form의 객체
 * @return form내의 모든객체의 이름과 값
 */
iobject.getFormValues = function(form)
{
    var formValues  = "";

    for (var i = 0; i < form.elements.length; i++)
    {
        var element = form.elements[i];

        if (!element.isDisabled)
        {
            var name    = element.name;

            if (!istring.isEmpty(name))
            {
                var tagName = element.tagName;

                switch (tagName)
                {
                    case    "BUTTON"    :
                        var type    = element.type;

                        switch (type)
                        {
                            case    "button"    :
                                formValues  += name + "=" + escape(element.value) + "&";
                                break;
                            case    "reset" :
                                break;
                            case    "submit"    :
                                formValues  += name + "=" + escape(element.value) + "&";
                                break;
                            default             :
                                formValues  += name + "=" + escape(element.value) + "&";
                                break;
                        }
                        break;
                    case    "INPUT"     :
                        var type    = element.type;

                        switch (type)
                        {
                            case    "button"    :
                                formValues  += name + "=" + escape(element.value) + "&";
                                break;
                            case    "checkbox"  :
                                if (element.checked)
                                {
                                    formValues  += name + "=" + escape(element.value) + "&";
                                }
                                break;
                            case    "file"  :
                                formValues  += name + "=" + escape(element.value) + "&";
                                break;
                            case    "hidden"    :
                                formValues  += name + "=" + escape(element.value) + "&";
                                break;
                            case    "image" :
                                formValues  += name + "=" + escape(element.value) + "&";
                                break;
                            case    "password"  :
                                formValues  += name + "=" + escape(element.value) + "&";
                                break;
                            case    "radio" :
                                if (element.checked)
                                {
                                    formValues  += name + "=" + escape(element.value) + "&";
                                }
                                break;
                            case    "reset" :
                                break;
                            case    "submit"    :
                                formValues  += name + "=" + escape(element.value) + "&";
                                break;
                            case    "text"  :
                                formValues  += name + "=" + escape(element.value) + "&";
                                break;
                            default :
                                formValues  += name + "=" + escape(element.value) + "&";
                                break;
                        }
                        break;
                    case    "SELECT"    :
                        var type    = element.type;

                        switch (type)
                        {
                            case    "select-multiple"   :
                                break;
                            case    "select-one"        :
                                var selectedIndex   = element.selectedIndex;

                                if (selectedIndex >= 0)
                                {
                                    /*formValues    += name + "=" + escape(element.options[selectedIndex].value) + "&"; */
                                    formValues  += name + "=" + escape(element.value) + "&";
                                }
                                break;
                            default :
                                formValues  += name + "=" + escape(element.value) + "&";
                        }
                        break;
                    case    "TEXTAREA"  :
                        var type    = element.type;

                        switch (type)
                        {
                            case    "textarea"  :
                                formValues  += name + "=" + escape(element.value) + "&";
                                break;
                            default :
                                formValues  += name + "=" + escape(element.value) + "&";
                                break;
                        }
                        break;
                }
            }
        }
    }

    if (formValues.length)
    {
        formValues  = formValues.substr(0, formValues.length - 1);
    }

    return  formValues;
}

/*
 * resetFormValues
 * 폼내에 있는 객체의 value값 초기화
 *
 * @param form의 객체
 * @return form내의 모든객체의 이름과 값
 */
iobject.resetFormValues = function(form)
{
    var formValues  = "";

    for (var i = 0; i < form.elements.length; i++)
    {
        var element = form.elements[i];

// element 가 enable/disable 에 상관없이 처리하도록 주석처리 - 이한호
//        if (!element.isDisabled)
//        {
            var name    = element.name;

            if (!istring.isEmpty(name))
            {
                var tagName = element.tagName;

                switch (tagName)
                {
                    case    "BUTTON"    :
                        break;
                    case    "INPUT"     :
                        var type    = element.type;

                        switch (type)
                        {
                            case    "button"    :
                                break;
                            case    "checkbox"  :
                                if (element.checked)
                                {
									element.checked = false;
                                }
                                break;
                            case    "file"  :
                                element.value = "";
                                break;
                            case    "hidden"    :
                                element.value = "";
                                break;
                            case    "password"  :
								element.value = "";
                                break;
                            case    "radio" :
                                if (element.checked)
                                {
									element.checked = false;
                                }
                                break;
                            case    "reset" :
                                break;
                            case    "submit"    :
                                break;
                            case    "text"  :
                                element.value = "";
                                break;
                            default :
                                element.value = "";
                                break;
                        }
                        break;
                    case    "SELECT"    :
                        var type    = element.type;

                        switch (type)
                        {
                            case    "select-multiple"   :
                                break;
                            case    "select-one"        :
                                var selectedIndex   = element.selectedIndex;

                                if (selectedIndex >= 0)
                                {
                                    element.selectedIndex = 0;
                                }
                                break;
                            default :
                                element.selectedIndex = 0;
                        }
                        break;
                    case    "TEXTAREA"  :
                        var type    = element.type;

                        switch (type)
                        {
                            case    "textarea"  :
                                element.value = "";
                                break;
                            default :
                                element.value = "";
                                break;
                        }
                        break;
                }
            }
//        }
    }
}


/*
 * getValue
 * obj의 value값을 얻는다.
 * ',' , '-' , ':' 문자는  제거된다.
 *
 * @param   obj
 * @return  value
 */
iobject.getValue = function(obj)
{
    var destobj = null;
    if (obj == null)
    {
        return  null;
    }
    else if (typeof(obj) == "string")
    {
        destobj = document.getElementById(obj);
        if (!destobj)
        {
            destobj = document.getElementsByName(obj);
            if (destobj)
            {
                destobj = destobj[0];
            }
        }
    }
     else if (typeof(obj) == "object")
    {
        if (obj.length)
        {
			destobj = obj;
		    if (arguments.length > 1)
            {

                destobj = obj[arguments[1]];
            }
        }
        else
        {
            destobj = obj;
        }
    }

    var value   = destobj.value;



    var dataType= destobj.getAttribute("dataType");

    if (dataType == "dateYMD")
    {
        value   = istring.deletePattern(value,iconst.SEP_DATE);

        if (!idate.isDateYMD(value))
        {
            value   = "";
        }
    }
    else if (dataType == "dateM")
    {
        if ( !idate.isDateYM("1111"+value))
        {
            value   = "";
        }
    }
    else if (dataType == "dateYM")
    {
        value   =  istring.deletePattern(destobj.value,iconst.SEP_DATE);

        if ( !idate.isDateYM(value))
        {
            value   = "";
        }
    }
    else if (dataType == "dateMD")
    {
        value   =  istring.deletePattern(destobj.value,iconst.SEP_DATE);

        if ( !idate.isDateMD(value))
        {
            value   = "";
        }
    }
    else if (dataType == "dateY")
    {
        if ( !idate.isDateYM(value + "01"))
        {
            value   = "";
        }
    }
    else if (dataType == "datetimeHMS")
    {
        value   = itime.deleteDateTimeFormat(destobj.value);

        if (!itime.isDateTime(value))
        {
            value   = "";
        }
    }
    else if (dataType == "datetimeHM")
    {
        value   = itime.deleteDateTimeFormat(destobj.value);

        if (!itime.isDateTime(value+"01"))
        {
            value   = "";
        }
    }
    else if (dataType == "timeHMS" )
    {
        value   =  istring.deletePattern(destobj.value,iconst.SEP_TIME);

        if ( !itime.isTime(value))
        {
            value   = "";
        }
    }
    else if (dataType == "timeHM")
    {
        value   =  istring.deletePattern(destobj.value,iconst.SEP_TIME);

        if ( !itime.isTime(value+"01"))
        {
            value   = "";
        }
    }
    else if (dataType == "number")
    {
        if (destobj.getAttribute("comma") != null)
        {
            value   = istring.deletePattern(destobj.value,",");
        }

        if (!inumber.isNumber(value))
        {
            value   = "0";
        }
    }
    else if (dataType == "integer")
    {
        if (destobj.getAttribute("comma") != null)
        {
            value   =  istring.deletePattern(destobj.value,",");
        }

        if (!inumber.isInteger(value))
        {
            value   = "0";
        }
    }
    else if (dataType == "won" || dataType == "mwon")
    {
        if (destobj.getAttribute("comma") != null)
        {
            value   =  istring.deletePattern(destobj.value,",");
        }

		var currency = obj.getAttribute("currency");
		if ( currency == null )
		{
			if (!iformat.imoney.isWon(value))
			{
				value   = "0";
			}
		}else{
			if ( !iformat.imoney.isCurrency(value,currency) )
			{
				value   = "0";
			}
		}
    }
    else if (dataType == "mwon")
    {
        if (destobj.getAttribute("comma") != null)
        {
            value   =  istring.deletePattern(destobj.value,",");
        }

		var currency = obj.getAttribute("currency");
		if ( currency == null )
		{
			if (!iformat.imoney.isWon(value))
			{
				value   = "0";
			}
		}else{
			if ( !iformat.imoney.isCurrency(value,currency) )
			{
				value   = "0";
			}
		}
    }
    else if (dataType == "float"  || dataType == "double" )
    {
        if (destobj.getAttribute("comma") != null) {
            value   =  istring.deletePattern(destobj.value,",");
        }

        if (!inumber.isFloat(value))
        {
            value   = "0";
        }
    }
    else if (dataType == "postcode")
    {
        value   =  istring.deletePattern(destobj.value,"-");

        if (!iformat.ipost.isPostCode(value)) {
            value   = "";
        }
    }
    else if (dataType == "juminno")
    {
        value   =istring.deletePattern(destobj.value, "-");

        if (!iformat.ijuminno.isJuminNo(value)) {
            value   = "";
        }
    }
    else if (dataType == "saupno")
    {
        value   =  istring.deletePattern(destobj.value,"-");

        if (!iformat.isaupno.isSaupNo(value))
        {
            value   = "";
        }
    }
    else if (dataType == "corpno")
    {
        value   =istring.deletePatternObj(destobj,"-");

        if (!iformat.icorpno.isCorpNo(value))
        {
            value   = "";
        }
    }
    else if (dataType == "phone")
    {
        value   = istring.deletePattern(destobj.value,"-");

        if (!iformat.iphone.isPhone(value))
        {
            value   = "";
        }
    }
    else if (dataType == "email")
    {
    }
    else if (dataType == "rate")
    {
        //ignore
    }
    else if (dataType != null && dataType != "")
    {
        value   = istring.deletePattern(destobj.value,"-");
        value   = istring.deletePattern(value,"/");
    }

    return  value;
}

/*
 * Object에 값을 세팅한다.
 *
 * @param   obj
 * @param   value
 */
iobject.setValue = function(obj, value) {
	if (obj) {
		if (obj.type == "text" || obj.type == "hidden" || obj.type == "textarea") {
			obj.value   = value;
			iformat.addAllFormatObj(obj);
		} else if (obj.tagName == "SELECT") {
			for (var i = 0; i < obj.length; i++) {
				if (obj.options[i].value == value) {
					obj.options[i].selected = true;
					break;
				}
			}
		}
	}
}


/* ==================================================================== */
/*   9. iutil 구현부                                                    */
/* ==================================================================== */

iutil.ClassURL = "";


/*
 * Function Equivalent to java.net.URLEncoder.encode(String, "UTF-8")
 * Copyright (C) 2002, Cresc Corp.
 * Version: 1.0
 */

/**
 * encodeURL
 * 문자열을 UTF-8 형식으로 인코딩
 *
 * @param string
 * @return string
 */
iutil.encodeURL = function(str)
{
    var s0, i, s, u;
    s0 = "";                // encoded str
    // scan the source
    for (var i=0; i < str.length; i++)
    {
        s = str.charAt(i);
        u = str.charCodeAt(i);          // get unicode of the char
        if (s == " "){s0 += "+";}       // SP should be converted to "+"
        else
        {
            // check for escape
            if ( u == 0x2a || u == 0x2d || u == 0x2e || u == 0x5f || ((u >= 0x30) && (u <= 0x39)) || ((u >= 0x41) && (u <= 0x5a)) || ((u >= 0x61) && (u <= 0x7a)))
            {
                s0 = s0 + s;            // don't escape
            }
            else // escape
            {
                if ((u >= 0x0) && (u <= 0x7f)) // single byte format
                {
                    s = "0"+u.toString(16);
                    s0 += "%"+ s.substr(s.length-2);
                }
                else if (u > 0x1fffff) // quaternary byte format (extended)
                {
                    s0 += "%" + (0xf0 + ((u & 0x1c0000) >> 18)).toString(16);
                    s0 += "%" + (0x80 + ((u & 0x3f000) >> 12)).toString(16);
                    s0 += "%" + (0x80 + ((u & 0xfc0) >> 6)).toString(16);
                    s0 += "%" + (0x80 + (u & 0x3f)).toString(16);
                }
                else if (u > 0x7ff) // triple byte format
                {
                    s0 += "%" + (0xe0 + ((u & 0xf000) >> 12)).toString(16);
                    s0 += "%" + (0x80 + ((u & 0xfc0) >> 6)).toString(16);
                    s0 += "%" + (0x80 + (u & 0x3f)).toString(16);
                }
                else // double byte format
                {
                    s0 += "%" + (0xc0 + ((u & 0x7c0) >> 6)).toString(16);
                    s0 += "%" + (0x80 + (u & 0x3f)).toString(16);
                }
            }
        }
    }
    return s0;
}


/*
 * Function Equivalent to java.net.URLDecoder.decode(String, "UTF-8")
 * Copyright (C) 2002, Cresc Corp.
 * Version: 1.0
 */

/**
 * decodeURL
 * 문자열을 UTF-8 형식으로 디코딩
 *
 * @param string
 * @return string
 */
iutil.decodeURL = function(str)
{
    var s0, i, j, s, ss, u, n, f;
    s0 = "";                            // decoded str
    // scan the source str
    for (var i = 0; i < str.length; i++)
    {
        s = str.charAt(i);
        if (s == "+"){s0 += " ";}       // "+" should be changed to SP
        else
        {
            if (s != "%"){s0 += s;}     // add an unescaped char
            else                        // escape sequence decoding
            {
                u = 0;          // unicode of the character
                f = 1;          // escape flag, zero means end of this sequence
                while (true)
                {
                    ss = "";        // local str to parse as int
                        for (var j = 0; j < 2; j++ )  // get two maximum hex characters for parse
                        {
                            sss = str.charAt(++i);
                            if (((sss >= "0") && (sss <= "9")) || ((sss >= "a") && (sss <= "f"))  || ((sss >= "A") && (sss <= "F")))
                            {
                                ss += sss;      // if hex, add the hex character
                            } else {--i; break;}    // not a hex char., exit the loop
                        }
                    n = parseInt(ss, 16);           // parse the hex str as byte
                    if (n <= 0x7f){u = n; f = 1;}   // single byte format
                    if ((n >= 0xc0) && (n <= 0xdf)){u = n & 0x1f; f = 2;}   // double byte format
                    if ((n >= 0xe0) && (n <= 0xef)){u = n & 0x0f; f = 3;}   // triple byte format
                    if ((n >= 0xf0) && (n <= 0xf7)){u = n & 0x07; f = 4;}   // quaternary byte format (extended)
                    if ((n >= 0x80) && (n <= 0xbf)){u = (u << 6) + (n & 0x3f); --f;}         // not a first, shift and add 6 lower bits
                    if (f <= 1){break;}         // end of the utf byte sequence
                    if (str.charAt(i + 1) == "%"){ i++ ;}                   // test for the next shift byte
                    else {break;}                   // abnormal, format error
                }
            s0 += String.fromCharCode(u);           // add the escaped character
            }
        }
    }
    return s0;
}


/**
 * URL 작성 헬퍼 함수
 * setURL
 *
 * @param 클래스 URL
 */
iutil.setURL = function(strClassURL)
{
    iutil.ClassURL = strClassURL;
}


/**
 * URL 인자 추가
 * addURLParam
 *
 * @param   strParam
 * @param   strParamValue
 */

iutil.addURLParam = function(strParamName, strParamValue)
{
    if ( typeof(strParamValue) == "number" ) strParamValue = String(strParamValue);

//AJAX방식에서 썼던 인코딩으로 교체
//    iutil.ClassURL = iutil.ClassURL + "&" + iutil.encodeURL(strParamName) + "=" + iutil.encodeURL(strParamValue);
    iutil.ClassURL += "&" +encodeURIComponent(strParamName) + "=" + encodeURIComponent(strParamValue);
}


/**
 * 만들어진 URL 리턴
 * getURL
 *
 * @return 클래스 URL
 */
iutil.getURL = function()
{
    return iutil.ClassURL;
}

/**
 * Form 객체 생성
 * createForm
 *
 * @param   strName
 * @param   strMethod
 * @param   strAction
 * @param   strTarget
 *
 * Example :
 * var form = iutil.createForm("frmGo", "post", "http://localhost/login.xml", "_self");
 * form = iutil.addFormParam(form, "id", id);
 * form = iutil.addFormParam(form, "pw", pw);
 * iutil.callSubmit(form);
 */
iutil.createForm = function(strName, strMethod, strAction, strTarget)
{
    var objForm    = document.createElement("form");
    objForm.name   = strName;
    objForm.method = strMethod;
    objForm.action = strAction;
    objForm.target = strTarget;

    return objForm;
}

/**
 * Form 객체 생성
 * addFormParam
 *
 * @param   objForm
 * @param   strName
 * @param   strValue
 */
iutil.addFormParam = function(objForm, strName, strValue)
{
    var objInput   = document.createElement("input");
    objInput.type  = "hidden";
    objInput.name  = strName;
    objInput.value = strValue;
    objForm.insertBefore(objInput);

    return objForm;
}

/**
 * Form 객체의 submit() 호출
 * callSubmit
 *
 * @param   objForm
 */
iutil.callSubmit = function(objForm)
{
    document.insertBefore(objForm);
    objForm.submit();
}

/**
 * Form 객체의 submit() 호출
 * callSubmit
 *
 * @param   message
 * @param   usession
 * @param   nextpage
 * @param   target
 */
iutil.goNextPage = function(message, usession, nextpage, target)
{
//  alert("message="+message+",usession="+usession+",nextpage="+nextpage+",target="+target);
    if (message != null && message != "")
        alert(message);

    //로그인페이지로 이동
    if (usession == null || usession != "true")
    {
        if (target=="popup")    //팝업형 로그인창인경우
            iwindow.openWindow(iconst.LOGIN_PAGE+"&popup=Y","Login",800,400,null);
        else
            top.location.href   = iconst.LOGIN_PAGE;
        return;
    }
    //로그인 되어 있다면
    if (target == "new")
    {
        iwindow.openWindow(nextpage,target,800,400,null);
        return;
    }
    else if (target == "modal")
    {
        iwindow.openModalWindow(nextpage,target,800,400,null);
        return;
    }
    else if (target == "modalness")
    {
        iwindow.openModalessWindow(nextpage,target,800,400,null);
        return;
    }
    else if (target == "opener")
    {
        if (nextpage == "reload" )
        {
			if(opener.name=="ifrmPopup")//부모가 팝업창일 경우, 팝업창 새로고침
	        {
		        //alert(window.parent.opener.name);
		        window.opener.location.reload();
	        }
        	else if( window.opener.name!="")
            {
                //alert(window.opener.name);
                window.opener.top.location.reload();//부모의 최상위 전체 새로고침
            }
            else
            {
                //alert(window.opener.name);
                window.opener.top.___process=false;
                window.opener.location.reload();    //해당 부모만 새로고침
            }
        }
        else
            window.opener.location.href=nextpage;
        self.close();
    }
    else if (target != null && target != "" )
    {
        eval(target+".location.replace('"+nextpage+"')");
        return;
    }

    if (nextpage == "close" )
    {
        self.close();
    }
}
/**
 * 타겟의 자바스크립트를 실행한다.
 * executeScript
 *
 * @param   message
 * @param   executeScript
 * @param   target
 */
iutil.executeScript = function(message, executeScript, target)
{
    if (message != null && message != "")
        alert(message);

    if (target == null || target == "" )
    {
        target = "parent";
    }
    eval(target+"."+executeScript);
}
/**
 * Form 내의 객체들의 이벤트를 설정한다.
 * addURLParam
 *
 * @param form
 */
iutil.reset = function(obj)
{
    var elements = obj.elements;
    /* elements의 이름을 모두 저장 */
    var element_name="";

    for (var j = 0; j < elements.length; j++)
    {
        /* INPUT 객체의 onblur 이벤트에 핸들러를 등록한다. */
        if (elements(j).tagName == "INPUT")
        {
            elements(j).value="";
        }
        else if(elements(j).tagName == "TEXTAREA")
        {
            elements(j).value="";
        }
        else if(elements(j).tagName == "SELECT")
        {
            elements(j).selectedIndex=-1;
        }
    }
}
/**
 * DataTypeError
 * DataType 에러 처리
 *
 * @param   object
 */
iutil.DataTypeError = function(obj, focusTarget)
{
    dispName = obj.getAttribute("dispName");

    if (dispName == null) {
        dispName = obj.name;
    }

    alert("[" + dispName + "] 형식이 올바르지 않습니다.");
    if(focusTarget != null){
      focusTarget.focus();
    }else{
      obj.focus();
    }

    if (window.event) {
        window.event.returnValue = false;
    }
    return;
}
iutil.changeDisplay = function(obj)
{
	var state = obj.style.display;
	if(state=='none')
		obj.style.display="inline";
	else
		obj.style.display="none";

}
/* ==================================================================== */
/*   10. ievent 구현부                                                  */
/* ==================================================================== */

ievent.element_name = "";
/**
 * Form 내의 객체들의 이벤트를 설정한다.
 * addURLParam
 *
 */
ievent.setEvent = function()
{
    var forms = document.forms;
    for (var i = 0; i < forms.length; i++)
    {
        ievent.setEventForm(forms[i]);
    }
}

/**
 * Form 내의 객체들의 이벤트를 설정한다.
 * addURLParam
 *
 * @param form
 */
ievent.setEventForm = function(form)
{
    /*디버깅 모드*/
    try{
		if(debug_mode || debug_mode=="STOP")
			document.all("Table_Debug").style.display='inline';
    }catch(e){}

    var elements = form.elements;

	ievent.element_name = "";
    for (var j = 0; j < elements.length; j++)
    {
        ievent.setEventObject(elements(j));
    }

    ievent.element_name = "";
}

/**
 * 객체의 이벤트를 설정한다.
 * setEventObject
 *
 * @param Object
 */
ievent.setEventObject = function(obj)
{
	/* INPUT 객체의 onblur 이벤트에 핸들러를 등록한다. */
	if (obj.tagName == "INPUT")
	{
		var dataType = obj.getAttribute("dataType");

		if (dataType != null  &&  dataType != "")
			obj.style.imeMode = "disabled";
		obj.onfocus = function () {obj.select();};

		if (dataType == "won" || dataType == "mwon")
		{
			obj.style.textAlign = "right";
			var currency = obj.getAttribute("currency");

			obj.attachEvent("onkeyup", inumber.addNumberCommaEvt );
			if(dataType == "won")
			{
			    obj.onkeypress  = function() {return ievent.acceptCurrencyUseComma();};
			}
			else
		    {
			    obj.onkeypress  = function() {return ievent.acceptCurrencyUseCommaMinus();};
		    }

            if ( currency != null )
            {
				obj.attachEvent("onblur", inumber.addCurrencyEvt );
            }

		}
		else if ( dataType == "integer" )
		{ 
			obj.style.textAlign = "right";
			if (obj.getAttribute("comma") != null)
			{
				obj.attachEvent("onkeyup", inumber.addNumberCommaEvt);
				obj.onkeypress  = function() {return ievent.acceptIntegerUseComma();};
			}else{
				obj.onkeypress  = function() {return ievent.acceptIntegerNotUseComma();};
			}
		}
		else if (dataType == "number" )
		{
			obj.style.textAlign = "right";
			if (obj.getAttribute("comma") != null)
			{
				obj.attachEvent("onkeyup", inumber.addNumberCommaEvt);
				obj.onkeypress  = function() {return ievent.acceptNumberUseComma();};
			}else{
				obj.onkeypress  = function() {return ievent.acceptNumberNotUseComma();};
			}
		}
		else if ( dataType == "float" )
		{
			if (obj.getAttribute("comma") != null)
			{
				obj.attachEvent("onkeyup", inumber.addNumberCommaEvt);
				obj.onkeypress  = function() {return ievent.acceptFloatUseComma();};
			}else{
				obj.onkeypress  = function() {return ievent.acceptFloatNotUseComma();};
			}
		}
		else if ( dataType == "double" )
		{
			if (obj.getAttribute("comma") != null)
			{
				obj.attachEvent("onkeyup", inumber.addNumberCommaEvt);
				obj.onkeypress  = function() {return ievent.acceptDoubleUseComma();};
			}else{
				obj.onkeypress  = function() {return ievent.acceptDoubleNotUseComma();};
			}
		}
		else if (dataType == "dateYMD")
		{
		 	obj.className   = obj.className+" format";
            obj.onblur      = idate.addDateYMDFormatEvt;
            obj.data_format = "dfDateYmd";
			//obj.maxLength       = 8;
			//obj.onblur          = idate.addDateYMDFormatEvt;
			//obj.onfocus         = idate.deleteDateFormatEvt;
			//obj.onkeypress      = function() {return ievent.acceptNumberOnly();};
		}
		else if (dataType == "dateYM")
		{
			obj.className   = obj.className+" format";
            obj.onblur      = idate.addDateYMFormatEvt;
            obj.data_format = "dfDateYm";
			//obj.maxLength       = 6;
			//obj.onblur          = idate.addDateYMFormatEvt;
			//obj.onfocus         = idate.deleteDateFormatEvt;
			//obj.onkeypress      = function() {return ievent.acceptNumberOnly();};
		}
		else if (dataType == "dateMD")
		{
			obj.className   = obj.className+" format";
            obj.onblur      = idate.addDateMDFormatEvt;
            obj.data_format = "dfDateMm";
			//obj.maxLength       = 4;
			//obj.onblur          = idate.addDateMDFormatEvt;
			//obj.onfocus         = idate.deleteDateFormatEvt;
			//obj.onkeypress      = function() {return ievent.acceptNumberOnly();};
		}
		else if (dataType == "dateY")
		{
			obj.className   = obj.className+" format";
            obj.onblur      = idate.isYearEvt;
            obj.data_format = "dfDateYy";
			//obj.maxLength       = 4;
			//obj.onblur          = idate.isYearEvt;
			//obj.onfocus         = idate.deleteDateFormatEvt;
			//obj.onkeypress      = function() {return ievent.acceptNumberOnly();};
		}
		else if (dataType == "dateM")
		{
			obj.className   = obj.className+" format";
            obj.onblur      = idate.isMonthEvt;
            obj.data_format = "dfDateMm";
			//obj.maxLength       = 2;
			//obj.onblur          = idate.isMonthEvt;
			//obj.onfocus         = idate.deleteDateFormatEvt;
			//obj.onkeypress      = function() {return ievent.acceptNumberOnly();};
		}
		else if (dataType == "datetimeHMS")
		{
			obj.className   = obj.className+" format";
            obj.onblur      = itime.addDateTimeHMSFormatEvt;
            obj.data_format = "dfTimeYmdhms";
			//obj.maxLength       = 14;
			//obj.onblur          = itime.addDateTimeHMSFormatEvt;
			//obj.onfocus         = itime.deleteDateTimeFormatEvt;
			//obj.onkeypress      = function() {return ievent.acceptNumberOnly();};
		}
		else if (dataType == "datetimeHM")
		{
			obj.className   = obj.className+" format";
            obj.onblur      = itime.addDateTimeHMFormatEvt;
            obj.data_format = "dfTimeYmdhm";
			//obj.maxLength       = 12;
			//obj.onblur          = itime.addDateTimeHMFormatEvt;
			//obj.onfocus         = itime.deleteDateTimeFormatEvt;
			//obj.onkeypress      = function() {return ievent.acceptNumberOnly();};
		}
		else if (dataType == "timeHMS")
		{
			obj.className   = obj.className+" format";
            obj.onblur      = itime.addTimeHMSFormatEvt;
            obj.data_format = "dfTimeHms";
			//obj.maxLength       = 6;
			//obj.onblur          = itime.addTimeHMSFormatEvt;
			//obj.onfocus         = itime.deleteTimeFormatEvt;
			//obj.onkeypress      = function() {return ievent.acceptNumberOnly();};
		}
		else if (dataType == "timeHM")
		{
			obj.className   = obj.className+" format";
            obj.onblur      = itime.addTimeHMFormatEvt;
            obj.data_format = "dfTimeHm";
			//obj.maxLength       = 4;
			//obj.onblur          = itime.addTimeHMFormatEvt;
			//obj.onfocus         = itime.deleteTimeFormatEvt;
			//obj.onkeypress      = function() {return ievent.acceptNumberOnly();};
		}
		else if (dataType == "postcode")
		{
			obj.className   = obj.className+" format";
            obj.onblur      = iformat.ipost.addPostCodeFormatEvt;
			obj.data_format = "dfPostNo";
			//obj.maxLength       = 6;
			//obj.onblur          = iformat.ipost.addPostCodeFormatEvt;
			//obj.onfocus         = iformat.ipost.deletePostCodeFormatEvt;
			//obj.onkeypress      = function() {return ievent.acceptNumberOnly();};
		}
		else if (dataType == "juminno")
		{
			obj.className = obj.className + " format";
            obj.onblur = iformat.ijuminno.addJuminNoFormatEvt;
            obj.data_format = "dfIdNo";
			//obj.maxLength       = 13;
			//obj.onblur          = iformat.ijuminno.addJuminNoFormatEvt;
			//obj.onfocus         = iformat.ijuminno.deleteJuminNoFormatEvt;
			//obj.onkeypress      = function() {return ievent.acceptNumberOnly();};
		}
		else if (dataType == "saupno")
		{
			obj.className = obj.className+" format";
            obj.onblur  = iformat.isaupno.addSaupNoFormatEvt;
            obj.data_format = "dfSaupNo";
			//obj.maxLength       = 10;
			//obj.onblur          = iformat.isaupno.addSaupNoFormatEvt;
			//obj.onfocus         = iformat.isaupno.deleteSaupNoFormatEvt;
			//obj.onkeypress      = function() {return ievent.acceptNumberOnly();};
		}
		else if (dataType == "corpno")
		{
			obj.className = obj.className+" format";
            obj.onblur      = iformat.icorpno.addCorpNoFormatEvt;
            obj.data_format = "dfCorpNo";
			//obj.maxLength       = 13;
			//obj.onblur          = iformat.icorpno.addCorpNoFormatEvt;
			//obj.onfocus         = iformat.icorpno.deleteCorpNoFormatEvt;
			//obj.onkeypress      = function() {return ievent.acceptNumberOnly();};
		}
		else if (dataType == "phone")
		{
			obj.onblur          = iformat.iphone.addPhoneFormatEvt;
			obj.onfocus         = iformat.iphone.deletePhoneFormatEvt;
			obj.onkeypress      = function() {return ievent.acceptNumberOnly();};
		}
		else if (dataType == "natural")
		{
			if (obj.getAttribute("comma") != null)
			{
				obj.attachEvent("onkeyup", inumber.addCommaEvt);
				obj.onfocus     = inumber.deleteCommaEvt;
			}
			obj.onkeypress      = function() {return ievent.acceptNumberOnly();};
		}
		else if (dataType == "area")
		{
			if (obj.getAttribute("comma") != null)
			{
				obj.onblur      = inumber.addCommaEvt;
				obj.onfocus     = inumber.deleteCommaEvt;
			}
			obj.onkeypress      = function() {return ievent.acceptNumberPeriodOnly();};
		}
		else if (dataType == "foreignno")
		{
			//obj.onblur          = iformat.iforeignno.addForeignNoFormatEvt;
			//obj.onfocus         = iformat.iforeignno.deleteForeignNoFormatEvt;
			//obj.onkeypress      = function() {return ievent.acceptNumberOnly();};
		}
		else if (dataType == "eng")
		{
			obj.onblur          = function() {return ievent.checkEnglish(this);};
		}
		else if (dataType == "upper")
		{
			obj.onkeypress      = function() {return ievent.acceptUpperOnly();};
			obj.onblur          = function() {this.value=this.value.toUpperCase();return ievent.checkEnglish(this);};
		}
		else if (dataType == "lower")
		{
			obj.onkeypress      = function() {return ievent.acceptLowerOnly();};
			obj.onblur          = function() {this.value=this.value.toLowerCase();return ievent.checkEnglish(this);};
		}
		else if (dataType == "kor")
		{
			/* 한글 */
			obj.style.imeMode   = "active";
			obj.onkeypress      = function() {return ievent.acceptKoreanOnly();};/*입력전값 */
			obj.onblur          = function() {return ievent.checkKorean(this);};
		}
		else if (dataType == "nonum") // 기능 안됨!!!
		{
			obj.onblur          = function() {return ievent.checkNonum(this);};
		}

		else if (dataType == "email")
		{
			obj.onblur          = iformat.iemail.addEmailFormatEvt;
		}
		else if (dataType == "rate" )
		{
			obj.style.textAlign = "right";
			obj.onblur      = inumber.addPointEvt;
			obj.onfocus     = inumber.deletePointEvt;
			obj.onkeypress  = function() {return ievent.acceptNumberOnly(0);};

		}
		else if(dataType != null  &&  dataType != "")
		{
			var check = /^[#\/\-:_|]*$/.test(dataType);
			if ( check )
			{
				obj.className   = obj.className+" format";
            	obj.data_format = "dfUserDefineNum";
            	obj.onblur      = iformat.addUserDefineFormatEvt;
			}
			var check2 = /^[\*\/\-:_|]*$/.test(dataType);
			if ( check2 )
			{
				obj.className   = obj.className+" format";
            	obj.data_format = "dfUserDefine";
            	obj.onblur      = iformat.addUserDefineFormatEvt;
			}
			//var format2= istring.deletePattern(dataType, "-");
			//format2= istring.deletePattern(format2, "/");
			//var check =0;
			//for(var i=0; i<format2.length; i++)
			//{
			//	if(format2.substr(i,1)!="0" && format2.substr(i,1)!="#")
			//		check++;
			//}
			//if( check==0)
			//	obj.onkeypress  = function() {return ievent.acceptNumberOnly(0);};
			//obj.onfocus         = iformat.deleteUserDefineFormatEvt;
			//obj.onblur          = iformat.addUserDefineFormatEvt;
		}
		iformat.addAllFormatObj(obj);
	}
	else if (obj.tagName == "SELECT")   //콤보박스 초기값 설정
	{
		var element = obj;
		ievent.element_name += element.name+";";   //elements의 이름을 모두 저장
		var selectType = element.type;
		if (selectType == "select-one")
		{
			try
			{
				var xmlgroup_field = element.group_field;// 그룹필드값_XML
				var xmlInit = element.xml_init;          // 필드초기값_XML
				if (xmlInit != null)                     //xml 초기값이 설정 되어 있다면
				{
					var element_cnt = ievent.getCountSubString(ievent.element_name, element.name); //콤보가 배열일때  몇번째인지
					var value = iajax.getXmlLinkValue(xmlInit, element_cnt);                // 설정값 읽기
					if (value == "")
						element.value = value;  // 설절값으로 콤보 선택하기
					if (element.value != value) //일치되는 값이 없다면
					{
						alert(element.name+"의 일치되는 값이 없습니다.");
					}
				}
			}
			catch (e)
			{
			}
		}
	}
}
/**
 * ClearForm
 * Form 객체 내부의 INPUT, SELECT, TEXTAREA객체의 값을 초기화 시켜준다.
 *
 * @param FormObject
 */
ievent.ClearForm = function(FormElement, isHidden)
{
    if ( null == FormElement )
    {
        alert("폼 객체가 존재하지 않습니다.??");
        return;
    }

    var elements = FormElement.elements;
    var TagName  = "";
    for (var j = 0; j < elements.length; j++)
    {
        TagName = elements(j).tagName.toLowerCase();

        if (  TagName == "select" )
        {
            elements(j).selectedIndex=-1;
        }
        else if ( TagName == "textarea")
        {
            elements(j).value="";
        }
        else if ( TagName == "input" )
        {
            if(elements(j).type=="text" || elements(j).type=="password" || elements(j).type=="file" )
            {
                elements(j).value="";
            }
            else if(elements(j).type=="hidden" && isHidden==true)
            {
                elements(j).value="";
            }
            else if ( elements(j).type == "radio" )
            {
                elements(j).checked=false;
            }
            else if ( elements[j].type == "checkbox" )
            {
                elements(j).checked=false;
            }
        }
    }
}
/**
 *  acceptNumberOnly
 *  숫자만을 입력받게 하다.
 *  @param opt  :   null or 0   - 숫자만(0-9), juminno, PostCode, SaupNo etc
 *                   1       - integer(- 사용가능)
 *                   2       - integer + 소수점 사용 가능(number or float)
 *                   3       - (-)없이 소수점 사용 가능 (number)
 **/
ievent.acceptNumberOnly = function(opt)
{
	// 평가기준가격 (-)없이 소수점두자리 제한
	var keyChar = String.fromCharCode(event.keyCode);
	var obj = window.event.srcElement;
	var objValue = obj.value + keyChar;
	var currency = obj.getAttribute("currency");
	if( opt == 3 && currency != null )
	{
		var check = ievent.checkCurrency(objValue,currency);
		if ( !check ) return false;
	}

	var key = window.event.keyCode;
	if (key >= 48 && key <= 57)
	{   /* '1' ~ '0' */
		return  true;
	}
	else if (key == 45)
	{       /* '-' */
		if (opt != null && (opt == 1 || opt == 2))
		{
			var val = obj.value;
			if (val.indexOf('-') == -1)
			{
				return  true;
			}
		}
	}
	else if (key == 46)
	{   /* '.' */
		if (opt != null && (opt == 2 || opt == 3))
		{
			var val = obj.value;
			if (val.indexOf('.') == -1)
			{
				return  true;
			}
		}
	}
    return  false;
}

ievent.checkCurrency = function(objValue,currency)
{
	var regexp = null;
	
	if (currency == "" || currency == null)
	{
		currency = "KRW"
	}
	
	var upperCurrency = currency.toUpperCase();
	
	if ( upperCurrency == "VND" || upperCurrency == "BEF"
	  || upperCurrency == "ITL"  || upperCurrency == "ESP"
	  || upperCurrency == "KRW"  || upperCurrency == "JPY" )
	{
		//정수만 허용
		regexp = /^[\d,]*$/;
	}else if ( upperCurrency == "USD" || upperCurrency == "GBP"
	  || upperCurrency == "EUR"  || upperCurrency == "DEM"
	  || upperCurrency == "FRF"  || upperCurrency == "CHF"
	  || upperCurrency == "HKD"  || upperCurrency == "CAD"
	  || upperCurrency == "AUD"  || upperCurrency == "NLG"
	  || upperCurrency == "DKK"  || upperCurrency == "SAR"
	  || upperCurrency == "AED"  || upperCurrency == "ATS"
	  || upperCurrency == "NOK"  || upperCurrency == "SEK"
	  || upperCurrency == "SGD"  || upperCurrency == "MYR"
	  || upperCurrency == "NZD"  || upperCurrency == "FIM"
	  || upperCurrency == "IDR"  || upperCurrency == "THB"
	  || upperCurrency == "MXN"  || upperCurrency == "CLP"
	  || upperCurrency == "CNY"  || upperCurrency == "INR" )
	{
		//소수 두자리까지 허용
		regexp = /^[\d,]*(\.\d{0,2})?$/;
	}else if ( upperCurrency == "KWD" || upperCurrency == "BHD" )
	{
		//소수 세자리까지 허용
		regexp = /^[\d,]*(\.\d{0,3})?$/;
	}else{
		alert("잘못된 currency(통화코드) 입니다.");
		return false;
	}
	if(objValue.search(regexp)==-1)
	{
		return false;
	}
	return true;
}

// 2009.11.05
ievent.checkCurrencyMinus = function(objValue,currency)
{
	var regexp = null;
	var upperCurrency = currency.toUpperCase();
	if ( upperCurrency == "VND" || upperCurrency == "BEF"
	  || upperCurrency == "ITL"  || upperCurrency == "ESP"
	  || upperCurrency == "KRW"  || upperCurrency == "JPY" )
	{
		//정수만 허용
		regexp = /^[\d,-]*$/;
	}else if ( upperCurrency == "USD" || upperCurrency == "GBP"
	  || upperCurrency == "EUR"  || upperCurrency == "DEM"
	  || upperCurrency == "FRF"  || upperCurrency == "CHF"
	  || upperCurrency == "HKD"  || upperCurrency == "CAD"
	  || upperCurrency == "AUD"  || upperCurrency == "NLG"
	  || upperCurrency == "DKK"  || upperCurrency == "SAR"
	  || upperCurrency == "AED"  || upperCurrency == "ATS"
	  || upperCurrency == "NOK"  || upperCurrency == "SEK"
	  || upperCurrency == "SGD"  || upperCurrency == "MYR"
	  || upperCurrency == "NZD"  || upperCurrency == "FIM"
	  || upperCurrency == "IDR"  || upperCurrency == "THB"
	  || upperCurrency == "MXN"  || upperCurrency == "CLP"
	  || upperCurrency == "CNY"  || upperCurrency == "INR" )
	{
		//소수 두자리까지 허용
		regexp = /^[\d,-]*(\.\d{0,2})?$/;
	}else if ( upperCurrency == "KWD" || upperCurrency == "BHD" )
	{
		//소수 세자리까지 허용
		regexp = /^[\d,-]*(\.\d{0,3})?$/;
	}else{
		alert("잘못된 currency(통화코드) 입니다.");
		return false;
	}
	if(objValue.search(regexp)==-1)
	{
		return false;
	}

    // 마지막에 마이너스가 들어가거나 마이너스가 2개이면 안된다. (정규식을 잘몰라서리 걍 함 --;)
	if( objValue.length!=1 && (objValue.lastIndexOf('-') == objValue.length-1))
	{
	    return false;
	}
	
	return true;
}

/**
 *  acceptNumberPeriodOnly
 *  숫자와 '.' (여러번)만을 입력받게 한다.
**/
ievent.acceptNumberPeriodOnly = function()
{
    var key = window.event.keyCode;
    if ( (key >= 48 && key <= 57)  ||  key == 46 )
    {
    /* '1' ~ '0',  '.' */
        return  true;
    }
    return  false;
}

/**
 *  acceptNumberColonOnly
 *  숫자와 ':' (여러번)만을 입력받게 한다.
**/
ievent.acceptNumberColonOnly = function()
{
    var key = window.event.keyCode;
    if ( (key >= 48 && key <= 57)  ||  key == 58 )
    {
    /* '1' ~ '0',  ':' */
        return  true;
    }
    return  false;
}


/**
 *  acceptUpperOnly
 *  대문자로 입력받기
**/
ievent.acceptUpperOnly = function()
{
    var key = window.event.keyCode;
    var obj = window.event.srcElement;
    if (key >= 97 && key <= 122) {  // 'a' ~ 'z'
        if(obj.maxLength>obj.value.length)
        {
            obj.value+= String.fromCharCode(key).toUpperCase();
            event.returnValue=false;
        }else{
            return  false;  //MAXLength가 넘을때
        }
    }else
    {
        if(obj.maxLength>obj.value.length)
        {
            //obj.value+= String.fromCharCode(key).toUpperCase();
            event.returnValue=true;
        }else{
            return  false;  //MAXLength가 넘을때
        }
    }

    return  true;
}
/**
 *  acceptLowerOnly
 *  소문자로 입력받기
**/
ievent.acceptLowerOnly = function()
{
    var key = window.event.keyCode;
    var obj = window.event.srcElement;
    if (key >= 65 && key <= 90) {   // 'A' ~ 'Z'
        if(obj.maxLength>obj.value.length)
        {
            obj.value+= String.fromCharCode(key).toLowerCase();
            event.returnValue=false;
        }else{
            return  false;  //MAXLength가 넘을때
        }
    }else
    {
        if(obj.maxLength>obj.value.length)
        {
            //obj.value+= String.fromCharCode(key).toUpperCase();
            event.returnValue=true;
        }else{
            return  false;  //MAXLength가 넘을때
        }
    }

    return  true;
}


/**
 *  acceptKoreanOnly
 *  한글만 입력받기
**/
ievent.acceptKoreanOnly = function()
{
    event.returnValue=false;
    alert("한글만 입력가능합니다.");
    return  true;
}


/**
 *  checkEnglish
 *  영문만 입력 되었는지 확인한다.
 *
 *  @param object
**/
ievent.checkEnglish = function(obj)
{
    var str = obj.value;

    if ( istring.isEnglish( str ) ) return true;

    alert("영문만 입력 가능합니다.");

    obj.focus();

    return false;
}

/**
 *  checkKorean
 *  한글만 입력 되었는지 확인한다.
 *
 *  @param object
**/
ievent.checkKorean = function(obj)
{
    var str = obj.value;

    if ( istring.isKorean( str ) ) return true;

    alert("한글만 입력 가능합니다.");

    obj.focus();

    return false;
}

/**
 *  checkNonum
 *  숫자 이외의 문자만 입력 되었는지 확인한다.
 *
 *  @param object
**/
ievent.checkNonum = function(obj)
{
    var str = obj.value;

    if ( !istring.isExistNum( str ) ) return true;

    alert("숫자 이외의 문자만 입력 가능합니다.");

    obj.select();

    return false;
}

/**
 *  checkUserDefind
 *  사용자 지정
 *
 *  @param object
**/
ievent.checkUserDefind = function(obj)
{
    var str = obj.value;

    if ( istring.isUserDefind( str ) ) return true;

    alert("한글만 입력 가능합니다.");

    obj.focus();

    return false;
}

/**
 *  getCountSubString
 *  구분자로 이루어진 문자열에 같은 패턴이 몇개나 있는지 조사
 *
 *  @param 문자열
 *  @param 패턴
 *  @param 구분자
 *  @return 패턴의 갯수
**/
ievent.getCountSubString = function(str, pattern, separator )
{
    if(str==null)
        return 0;

    if( separator == null || istring.trim(separator) == "" || typeof separator == 'undefined')
        separator=";";  //구분자 기본
    var temp = str.split(separator);
    var cnt =0;
    for(var k=0 ; k<temp.length ; k++)
    {
        if( temp[k]==pattern)
            cnt++;
    }
    return cnt;
}


/**
 * validate
 * 데이터 유효성을 체크한다.
 *
 * @param   form객체
 * @return  boolean
**/
ievent.validate = function(form)
{
    for (var i = 0; i < form.elements.length; i++)
    {
        obj = form.elements(i);
        if(  !ievent.validateObj(form, obj) ) return false;
    }
    return true;
}

/**
 * validateObj
 * 객체의 데이터 유효성을 체크한다.
 *
 * @param   object
 * @return  boolean
**/
ievent.validateObj = function(form, obj)
{
    if (obj==null || obj.type == "" || obj.disabled )
    {
        return true;
    }

    var dispName;
    var dataType;
    var minValue;
    var maxValue;
    var fixlen;
	var maxByte;
    var value;
    var isValid;
    var checkLimit;
    if (obj.tagName != "SELECT")
      obj.value   = istring.rtrim(obj.value);

    dispName    = obj.getAttribute("dispName");
    dataType    = obj.getAttribute("dataType");
    minValue    = obj.getAttribute("minValue");
    maxValue    = obj.getAttribute("maxValue");
	maxByte		= obj.getAttribute("maxByte");
    fixlen      = obj.getAttribute("fixlen");

    value       = obj.value;

    if (dispName == null)
    {
        dispName    = obj.name;
    }


    /* 필수 입력 항목 체크 */
    if (obj.getAttribute("notNull") != null)
    {
        isValid = false;

        if (obj.type == "radio" || obj.type == "checkbox")
        {
            if (form.elements(obj.name).length)
            {
                for (var j = 0; j < form.elements(obj.name).length; j++)
                {
                    if (form.elements(obj.name)[j].checked)
                    {
                        isValid = true;
                        break;
                    }
                }
            }
            else
            {
                if (obj.checked)
                {
                    isValid = true;
                }
            }
        }
        else
        {
            if (value != "")
            {
                isValid = true;
            }
        }

        if (!isValid)
        {
	        if (obj.type == "radio" || obj.type == "checkbox" || obj.tagName == "SELECT")
	        {
	            alert("[" + dispName + "]을(를) 선택하십시오.");
	        }else{
	            alert("[" + dispName + "]을(를) 입력하십시오.");
	        }
			//if(obj.currentStyle.overflow=="visible")
				obj.focus();
            if (window.event)
            {
                window.event.returnValue    = false;
            }
            return  false;
        }
    }

    /* 데이터 길이 체크 */
    if (fixlen != null)
    {
        if (value.length != eval(fixlen))
        {
            alert("[" + dispName + "]은(는) " + fixlen + "자리를 입력해야 합니다.");
            obj.focus();
            if (window.event)
            {
                window.event.returnValue    = false;
            }
            return  false;
        }
    }

	/* 최대 byte길이 체크 */
	if(maxByte != null)
	{

		if(istring.getByteLength(value) > maxByte) {
			alert("[" + dispName + "]은(는) 최대 " + maxByte + "byte 까지만 입력해야 합니다.");
            obj.focus();
            if (window.event)
            {
                window.event.returnValue    = false;
            }
            return  false;
		}
	}


    /* 데이터 타입 체크 */
    if (obj.type == "text" || obj.type == "textarea")
    {
        if (dataType == null)
        {
            var maxLength   = null;
            if (obj.type == "textarea")
            {
                maxLength   = obj.getAttribute("maxLength");
            }
            else
            {
                maxLength   = obj.maxLength;
            }

            if (obj.readOnly == false && maxLength != null && maxLength > 0 && istring.getByteLength(value) > maxLength)
            {
                alert("[" + dispName + "] 길이가 " + maxLength + " 을(를) 넘습니다.");
                obj.focus();
                if (window.event)
                {
                    window.event.returnValue    = false;
                }

                return  false;
            }
        }
        else if ((value != "") && (dataType != null))
        {
            isValid     = true;
            checkLimit  = false;

            if (dataType == "dateYMD" )
            {
                value   = istring.deletePattern(value,iconst.SEP_DATE);
                isValid = idate.isDateYMD(value);
            }
            else if ( dataType == "dateYM" )
            {
                value   = istring.deletePattern(value,iconst.SEP_DATE);
                isValid = idate.isDateYM(value);
            }
            else if ( dataType == "dateMD" )
            {
                value   = istring.deletePattern(value,iconst.SEP_DATE);
                isValid = idate.isDateMD(value);
            }
            else if ( dataType == "dateY" )
            {
                value   = istring.deletePattern(value,iconst.SEP_DATE);
                isValid = idate.isDateYM(value+"01");
            }
            else if ( dataType == "dateM" )
            {
                value   = istring.deletePattern(value,iconst.SEP_DATE);
                isValid = idate.isMonth(value);
            }
            else if ( dataType == "number" )
            {
                value = inumber.deleteComma(value);
                isValid = inumber.isNumber(value);
                checkLimit  = true;
            }
            else if ( dataType == "integer" )
            {
                value = inumber.deleteComma(value);
                isValid = inumber.isInteger(value);
                checkLimit  = true;
            }
            else if ( dataType == "float" || dataType == "double" )
            {
                value = inumber.deleteComma(value);
                isValid = inumber.isFloat(value);
                checkLimit  = true;
            }
            else if ( dataType == "won" || dataType == "mwon")
            {
				var currency = obj.getAttribute("currency");
				value = inumber.deleteComma(value);
				if ( currency == null )
				{
					isValid = iformat.imoney.isWon(value);
				}else{
					isValid = iformat.imoney.isCurrency(value,currency);
				}
                checkLimit  = true;
            }
            else if (dataType == "rate")
            {
                value = inumber.deleteComma(value);
                isValid = inumber.isFloat(value);
                checkLimit  = true;
            }
            else if ( dataType == "datetimeHMS" )
            {
                value = itime.deleteDateTimeFormat(value);
                isValid = itime.isDateTime(value);
            }
            else if ( dataType == "datetimeHM" )
            {
                value = itime.deleteDateTimeFormat(value+"00");
                isValid = itime.isDateTime(value);
            }
            else if (dataType == "timeHMS" )
            {
                value =  itime.deleteTimeFormat(value);
                isValid = itime.isTime(value);
            }
            else if ( dataType == "timeHM" )
            {
                value = itime.deleteTimeFormat(value+"00");
                isValid = itime.isTime(value);
            }
            /*
            else if (dataType == "postcode")
            {
                value = istring.deletePattern(value);
            }
            else if (dataType == "juminno")
            {
                value = istring.deletePattern(value,iconst.SEP_DATE);
            }
            else if (dataType == "saupno")
            {
                value = istring.deletePattern(value,iconst.SEP_DATE);
            }
            else if (dataType == "corpno")
            {
                value = istring.deletePatternObj(obj,"-");
            }
            else if (dataType == "phone")
            {
                value = istring.deletePatternObj(obj,"-");
            }
            else if (dataType == "natural")
            {

            }
            else if (dataType == "email")
            {
            }
            else if (dataType == "foreignno")
            {
                value = istring.deletePatternObj(obj,"-");
            }
            else if(dataType != null  &&  dataType != "")
            {
                value = istring.deletePatternObj(obj,"-");
                value = istring.deletePatternObj(obj,"/");
            }
            */

            if (!isValid)
            {
                alert("[" + dispName + "] 형식이 올바르지 않습니다.");
                if (dataType == "float" || dataType == "integer" || dataType == "number" || dataType == "double")
                {
                    obj.value   = "0";
                }
                obj.focus();
                if (window.event)
                {
                    window.event.returnValue    = false;
                }
                return  false;
            }

            if (checkLimit)
            {
                if (minValue != null)
                {
                    if (eval(minValue) > eval(value))
                    {
                        alert("[" + dispName + "] 값은 최소값(" + minValue + ") 이상입니다.");
                        obj.focus();
                        if (window.event)
                        {
                            window.event.returnValue    = false;
                        }
                        return  false;
                    }
                }

                if (isValid && (maxValue != null))
                {
                    if (eval(maxValue) < eval(value))
                    {
                        alert("[" + dispName + "] 값이 최대값(" + maxValue + ")을 초과합니다.");
                        obj.focus();
                        if (window.event)
                        {
                            window.event.returnValue    = false;
                        }
                        return  false;
                    }
                }
            }
        }
    }
    return  true;
}

/* changeFocus
 * onKeyUp이벤트 발생시 해당 value의 길이가 len일 때 obj_name으로 자동 포커스 옮김
 *
 * @param   len       문자열 길이
 * @param   obj_name  object 이름
 *
 *####### datatype이 'won'일 경우 comma수까지 포함해서 len값을 줄 것!!!
 */
var MaxWonLength = 15;

ievent.changeFocus = function(len, obj_name)
{
    var obj = window.event.srcElement;
    obj.maxLength=len;
    var tempVal = obj.value;
    var key = event.keyCode;

    if ( (key<48 || (key>57 && key<96) || key>105) &&    //숫자가 아니고
         (key!=8 && key!=46 && key!=0) )                 //backspace와 delete도 아닐때, 마우스 왼쪽버튼도 아닐때(콤보)
    {
        return;
    }

    if(obj.getAttribute("dataType") == "won" || dataType == "mwon")
    {
        iformat.addAllFormatObj(obj);
        tempVal = obj.value;
        var noComVal = istring.deletePattern(tempVal, ',');

        if(noComVal.length > MaxWonLength) //won 최대 13자리로 제한
        {
            obj.value = noComVal.substr(0, MaxWonLength);
            iformat.addAllFormatObj(obj);
            alert(MaxWonLength + "자리까지만 입력됩니다.");
        }
    }

    if(istring.getByteLength(tempVal)>=len && key != 9)  // tab키가 아닐 경우
    {
        try
        {
            document.getElementsByName(obj_name)[0].focus();
        }catch(e){}
    }
}

ievent.acceptCurrencyUseComma = function ()
{
	var keyChar = String.fromCharCode(event.keyCode);
	var obj = window.event.srcElement;
	var objValue = obj.value + keyChar;
	var currency = obj.getAttribute("currency");
	return ievent.checkCurrency(objValue,currency);
}

// 2009.11.05
ievent.acceptCurrencyUseCommaMinus = function ()
{
	var keyChar = String.fromCharCode(event.keyCode);
	var obj = window.event.srcElement;
	var objValue = obj.value + keyChar;

	var currency = obj.getAttribute("currency");
	return ievent.checkCurrencyMinus(objValue,currency);
}


ievent.acceptIntegerNotUseComma = function ()
{
	var keyChar = String.fromCharCode(event.keyCode);
	var obj = window.event.srcElement;
	var objValue = obj.value + keyChar;
	return inumber.isIntegerNotUseComma(objValue);
}

ievent.acceptIntegerUseComma = function ()
{
	var keyChar = String.fromCharCode(event.keyCode);
	var obj = window.event.srcElement;
	var objValue = obj.value + keyChar;
	return inumber.isIntegerUseComma(objValue);
}

ievent.acceptNumberNotUseComma = function ()
{
	var keyChar = String.fromCharCode(event.keyCode);
	var obj = window.event.srcElement;
	var objValue = obj.value + keyChar;
	return inumber.isNumberNotUseComma(objValue);
}

ievent.acceptNumberUseComma = function ()
{
	var keyChar = String.fromCharCode(event.keyCode);
	var obj = window.event.srcElement;
	var objValue = obj.value + keyChar;
	return inumber.isNumberUseComma(objValue);
}

// 2009.11.05
ievent.acceptNumberUseCommaMinus = function ()
{
	var keyChar = String.fromCharCode(event.keyCode);
	var obj = window.event.srcElement;
	var objValue = obj.value + keyChar;
	return inumber.isNumberUseCommaMinus(objValue);
}


ievent.acceptDoubleNotUseComma = function ()
{
	var keyChar = String.fromCharCode(event.keyCode);
	var obj = window.event.srcElement;
	var objValue = obj.value + keyChar;
	return inumber.isDoubleNotUseComma(objValue);
}

ievent.acceptDoubleUseComma = function ()
{
	var keyChar = String.fromCharCode(event.keyCode);
	var obj = window.event.srcElement;
	var objValue = obj.value + keyChar;
	return inumber.isDoubleUseComma(objValue);
}

ievent.acceptFloatNotUseComma = function ()
{
	var keyChar = String.fromCharCode(event.keyCode);
	var obj = window.event.srcElement;
	var objValue = obj.value + keyChar;
	return inumber.isFloatNotUseComma(objValue);
}

ievent.acceptFloatUseComma = function ()
{
	var keyChar = String.fromCharCode(event.keyCode);
	var obj = window.event.srcElement;
	var objValue = obj.value + keyChar;
	return inumber.isFloatUseComma(objValue);
}

/*************************************************************************************
 *
 *   2008-08-21 추가 진영선
 *
 *************************************************************************************/

/* getIndex
 * form에서 index 구하기
 */
ievent.getIndex = function getIndex(input)
{
	var index = -1, i = 0;
	while (i < input.form.length && index == -1)
	{
		if (input.form[i] == input)
		{
			index = i;
		}
		else
		{
			i++;
		}
	}

	return index;
}


function isCheckByteCharacter(str)
{
    for (var i = 0; i < str.length; i++)
    {
        if (str.charCodeAt(i) > 128)
        {
            return true;
        }
    }
	return false;
}

/* -------------------------------------------------------------------- */
/*   10-1. ipost 구현부                                                 */
/* -------------------------------------------------------------------- */
/**
 * isPostCode
 * 우편번호 형식인지 체크 한다.
 *
 * @param   code
 * @return  boolean
 */
iformat.ipost.isPostCode = function(code)
{
    if (code.length != 6)
    {
        return  false;
    }

    return  inumber.isInteger(code);
}

/**
 * addPostCodeFormat
 * 우편번호에 "-"를 붙인다.
 *
 * @param   우편번호(000000)
 * @return  우편번호(000-000)
 */
iformat.ipost.addPostCodeFormat = function(str)
{
    return  str.substring(0, 3) + "-" + str.substring(3, 6);
}

/**
 * addPostCodeFormatObj
 * 우편번호에 "-"를 붙인다.
 *
 * @param   object
 */
iformat.ipost.addPostCodeFormatObj = function(obj)
{
    var value = obj.value;

    if (istring.rtrim(value) == "")
    {
        return;
    }

    value = istring.deletePattern(value,"-");

    if (!iformat.ipost.isPostCode(value))
    {
        iutil.DataTypeError(obj);
        return;
    }

    obj.value = iformat.ipost.addPostCodeFormat(value);
}

/**
 * addPostCodeFormatEvt
 * 우편번호에 "-"를 붙인다.
 */
iformat.ipost.addPostCodeFormatEvt = function()
{
    var obj = window.event.srcElement;
    iformat.ipost.addPostCodeFormatObj(obj);
}

/**
 * deletePostCodeFormatObj
 * 우편번호에서 "-"를 없앤다.
 *
 * @param   object
 */
 iformat.ipost.deletePostCodeFormatObj = function(obj)
{
    obj.value = istring.deletePattern(obj.value,"-");
}

/**
 * deletePostCodeFormatEvt
 * 우편번호에 "-"를 없앤다.
 */
iformat.ipost.deletePostCodeFormatEvt = function()
{
    var obj = window.event.srcElement;
    iformat.ipost.deletePostCodeFormatObj(obj);
    obj.select();
}


/* -------------------------------------------------------------------- */
/*   10-2. ijuminno 구현부                                              */
/* -------------------------------------------------------------------- */

/**
 * isJuminNo
 * 주민번호 형식인지 체크 한다.
 *
 * @param   str
 * @return  boolean
 */
iformat.ijuminno.isJuminNo = function(str)
{
    var tmp = 0;
    var sex = str.substring(6, 7);
    var birthday;

    if (str.length != 13)
    {
        return  false;
    }

    if (str == "1111111111111")
    {
        return  true;
    }

    if (sex == 1 || sex == 2)
    {
        birthday = "19" + str.substring(0, 6);
    }
    else if (sex == 3  || sex == 4)
    {
        birthday = "20" + str.substring(0, 6);
    }
    else if (sex == 5)
    {
        return true;
    }
    else
    {
        return  false;
    }

    if (!idate.isDateYMD(birthday))
    {
        return  false;
    }

    for (var i = 0; i < 12 ; i++)
    {
        tmp = tmp + ((i%8+2) * parseInt(str.substring(i,i+1)));
    }

    tmp = 11 - (tmp %11);
    tmp = tmp % 10;

    if (tmp != str.substring(12, 13))
    {
        return  false;
    }

    return  true;
}

/* 주민번호 포맷 제어 */

/**
 * addJuminNoFormat
 * 주민번호에 "-"를 붙인다.
 *
 * @param   주민번호문자열 (0000000000000)
 * @return  주민번호문자열 : 하이픈 추가 (000000-0000000)
 */
iformat.ijuminno.addJuminNoFormat = function(str)
{
    return  str.substring(0, 6) + "-" + str.substring(6, 13);
}

/**
 * addJuminNoFormatObj
 * 주민번호에 "-"를 붙인다.
 *
 * @param   object
 */
iformat.ijuminno.addJuminNoFormatObj = function(obj)
{
    var value = obj.value;

    if (istring.rtrim(value) == "")
    {
        return;
    }

    value = istring.deletePattern(value,"-");

    if ( !iformat.ijuminno.isJuminNo(value))
    {
        iutil.DataTypeError(obj);
        obj.value = "";
        return;
    }

    obj.value = iformat.ijuminno.addJuminNoFormat(value);
}

/**
 * addJuminNoFormatEvt
 * 주민번호에 "-"를 붙인다.
 *
 * event 객체
 **/
iformat.ijuminno.addJuminNoFormatEvt = function()
{
    var obj = window.event.srcElement;
    iformat.ijuminno.addJuminNoFormatObj(obj);
}


/**
 * deleteJuminNoFormat
 * 주민번호에 "-"를 제거한다.
 *
 * @param   주민번호문자열 (000000-0000000)
 * @return  주민번호문자열(하이픈 제거) (0000000000000)
 */
iformat.ijuminno.deleteJuminNoFormat = function(str)
{
    if ( str == "" || str == null ) return str;
    return  istring.deletePattern(str, "-" );
}

/**
 * deleteJuminNoFormatObj
 * 주민번호에서 "-"를 없앤다.
 *
 * @param object
 */
iformat.ijuminno.deleteJuminNoFormatObj = function(obj)
{
    obj.value = istring.deletePattern(obj.value, "-" );
}

/**
 * deleteJuminNoFormatEvt
 * 주민번호에서 "-"를 없앤다.
 *
 * event 객체
 */
iformat.ijuminno.deleteJuminNoFormatEvt = function()
{
    var obj = window.event.srcElement;
    iformat.ijuminno.deleteJuminNoFormatObj(obj);
    obj.select();
}


/* -------------------------------------------------------------------- */
/*   10-3. isaupno 구현부                                                   */
/* -------------------------------------------------------------------- */

/**
 * isSaupNo
 * 사업자번호 형식인지 체크 한다.
 *
 * @param   str
 * @return  boolean
 */
iformat.isaupno.isSaupNo = function(str)
{
    if (str.length != 10)
    {
        return  false;
    }

    if (!iformat.isaupno.CheckSaupNo(str))
    {
        return  false;
    }

    return  inumber.isInteger(str);
}

/**
 * isSaupNo
 * 사업자등록번호 체크
 * XX-XXX-XXXXX
 *
 * @param   SaupNo
 * @return  boolean
 */
iformat.isaupno.CheckSaupNo = function(SaupNo)
{
	return true;	//임시적으로 반영 - 사업자번호 허용
    var sum = 0;
    var getlist = new Array(10);

    /* 사업자번호가 1111111111 이면 TRUE RETURN */
    if (SaupNo == "1111111111" )
    {
        return  true;
    }

    var chkvalue    = new Array("1","3","7","1","3","7","1","3","5");
    for (var i=0; i<10; i++)
    {
        getlist[i]  = SaupNo.substring(i, i+1);
    }

    for (var i=0; i<9; i++)
    {
        sum += getlist[i] * chkvalue[i];
    }
    sum = sum + parseInt((getlist[8] * 5) / 10);

    var sidliy  = sum % 10;
    var sidchk  = 0;
    if (sidliy != 0)
    {
        sidchk  = 10 - sidliy;
    } else {
        sidchk  = 0;
    }

    if (sidchk != getlist[9])
    {
        return  false;
    }
    return  true;
}


/* 사업자번호 포맷 제어 */

/**
 * addSaupNoFormat
 * 사업자번호에 "-"를 붙인다.
 *
 * @param   사업자 번호(stirng)
 * @return  사업자 번호('-'추가)
 */
iformat.isaupno.addSaupNoFormat = function(str)
{
    return  str.substring(0, 3) + "-"+ str.substring(3, 5) + "-"+ str.substring(5);
}

/**
 * addSaupNoFormatObj
 * 사업자번호에 "-"를 붙인다.
 *
 * @param   object
 */
iformat.isaupno.addSaupNoFormatObj = function(obj)
{
    var value = obj.value;

    if (istring.rtrim(value) == "")
    {
        return;
    }

    value = istring.deletePattern(value,"-");

    if (!iformat.isaupno.isSaupNo(value))
    {
        iutil.DataTypeError(obj);
        return;
    }

    obj.value = iformat.isaupno.addSaupNoFormat(value);
}

/**
 * addSaupNoFormatEvt
 * 사업자번호에 "-"를 붙인다.
 *
 * event 객체
 */
iformat.isaupno.addSaupNoFormatEvt = function()
{
    var obj = window.event.srcElement;
    iformat.isaupno.addSaupNoFormatObj(obj);
}

/**
 * deleteSaupNoFormat
 * 사업자번호에서 "-"를 없앤다.
 *
 * @param   사업자 번호('-'가 포함된 사업자 번호)
 * @return  사업자 번호('-'가 제거된 사업자 번호)
 **/
iformat.isaupno.deleteSaupNoFormat = function(str)
{
    if ( str == "" || str == null ) return str;
    return istring.deletePattern(str, "-");
}

/**
 * deleteSaupNoFormatObj
 * 사업자번호에서 "-"를 없앤다.
 *
 * @param object
 **/
iformat.isaupno.deleteSaupNoFormatObj = function(obj)
{
    obj.value = istring.deletePattern(obj.value, "-");
}

/**
 * deleteSaupNoFormatEvt
 * 사업자번호에서 "-"를 없앤다.
 *
 * event 객체
 **/
iformat.isaupno.deleteSaupNoFormatEvt = function()
{
    var obj = window.event.srcElement;
    iformat.isaupno.deleteSaupNoFormatObj(obj);
    obj.select();
}



/* -------------------------------------------------------------------- */
/*   10-4. icorpno 구현부                                               */
/* -------------------------------------------------------------------- */
/**
 * isCorpNo
 * 법인번호 형식인지 체크 한다.
 * XXXXXX-XXXXXXX
 *
 * @param   str(법인번호)
 * @return  boolean
 */
iformat.icorpno.isCorpNo = function(corpNo)
{
	if (corpNo == undefined )
	{
		return  false;
	}
	if (corpNo.length != 13)
	{
	    return  false;
	}

	/* [for test] 법인번호가 1111111111 이면 TRUE RETURN */
	if (corpNo == "1111111111111" )
	{
	    return  true;
	}

	/* 고객 신규등록시 법인번호가 없는 경우 '999+사업자번호'로 입력 */
	if( corpNo.substring(0,3) == "999")
	{
		var saupNo = corpNo.substring(3,13);

		if( iformat.isaupno.CheckSaupNo(saupNo) == true ){
			return true;
		}
		//return false;
	}

	var corpnum = corpNo;

    var sum = 0;
    var num = [1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2]

//    var last = parseInt(corpnum.charAt(12));
//    for(var i = 0; i < 12; i++) {
//        sum += parseInt(corpnum.charAt(i)) * num[i];
//    }
//    if((10 - sum % 10) % 10 != last)
//      return false;


	return true;
}


 /* 법인번호 포맷제어 */

 /**
 * addCorpNoFormat
 * 법인번호에 "-"를 붙인다.
 *
 * @param   법인번호(string)
 * @return  법인번호 ('-'추가)
 */
iformat.icorpno.addCorpNoFormat = function(str)
{
    return  str.substring(0, 6) + "-" + str.substring(6);
}

/**
 * addCorpNoFormatObj
 * 법인번호에 "-"를 붙인다.
 *
 * @param   object
 */
iformat.icorpno.addCorpNoFormatObj = function(obj)
{
    var value = obj.value;

    if (istring.rtrim(value) == "") {
        return;
    }

    value =istring.deletePattern(value, "-");

    if (!iformat.icorpno.isCorpNo(value))
    {
        iutil.DataTypeError(obj);
        return;
    }

    obj.value = iformat.icorpno.addCorpNoFormat(value);
}

/**
 * addCorpNoFormatEvt
 * 법인번호에 "-"를 붙인다.
 *
 * event 객체
 */
iformat.icorpno.addCorpNoFormatEvt = function()
{
    var obj = window.event.srcElement;
    iformat.icorpno.addCorpNoFormatObj(obj);
}

/**
 * addCorpNoFormatEvt
 * 법인번호에서 "-"를 없앤다.
 *
 * @param   object
 **/
iformat.icorpno.deleteCorpNoFormatObj = function(obj)
{
    obj.value = istring.deletePattern(obj.value, "-");
}

/**
 * deleteCorpNoFormatEvt
 * 법인번호에서 "-"를 없앤다.
 *
 * event 객체
 **/
iformat.icorpno.deleteCorpNoFormatEvt = function()
{
    var obj = window.event.srcElement;
    iformat.icorpno.deleteCorpNoFormatObj(obj);
    obj.select();
}


/* -------------------------------------------------------------------- */
/*   10-5. iforeignno 구현부                                            */
/* -------------------------------------------------------------------- */

/**
 * isForeignNo
 * 외국인번호 형식인지 체크 한다.
 *
 * @param   외국인번호(string)
 * @return  boolean
 */
iformat.iforeignno.isForeignNo = function(str)
{
    var sum = 0;
    var odd = 0;
    buf = new Array(13);

    if (str.length != 13)
    {
        return  false;
    }

    if (str == "2222222222222")
    {
        return  true;
    }

    for (var i = 0; i < 13; i++)
    {
        buf[i] = parseInt(str.charAt(i));
    }

    odd = buf[7] * 10 + buf[8];

    if (odd % 2 != 0)
    {
        return false;
    }

    if ( (buf[11]!=6) && (buf[11]!=7) && (buf[11]!=8) && (buf[11]!=9) )
    {
        return false;
    }

    multipliers = [2, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4, 5];

    for (var i = 0, sum = 0; i < 12; i++)
    {
        sum += (buf[i] *= multipliers[i]);
    }
    sum = 11 - (sum % 11);

    if (sum >= 10)
    {
        sum -= 10;
    }
    sum += 2;
    if (sum >= 10)
    {
        sum -= 10;
    }
    if (sum != buf[12])
    {
        return false
    }

    return true;
}

/* 외국인 번호 포맷제어 */


/**
 * addForeignNoFormatObj
 * 외국인번호에 "-"를 붙인다.
 *
 * @param   object
 */
iformat.iforeignno.addForeignNoFormatObj = function(obj)
{
    var value = obj.value;

    if (istring.rtrim(value) == "") {
        return;
    }

    value =istring.deletePattern(value,"-");

    if (!iformat.iforeignno.isForeignNo(value))
    {
        iutil.DataTypeError(obj);
        obj.value = "";
        return;
    }

    obj.value = addForeignNoFormat(value);
}

/**
 * addForeignNoFormatEvt
 * 외국인번호에 "-"를 붙인다.
 *
 * event 객체
 */
iformat.iforeignno.addForeignNoFormatEvt = function()
{
    var obj = window.event.srcElement;
    iformat.iforeignno.addForeignNoFormatObj(obj);
}

/**
 * addForeignNoFormat
 * 외국인번호에 "-"를 붙인다.
 *
 * @param  외국인 번호 (string)
 * @return 외국인 번호 ('-'추가)
 */
iformat.iforeignno.addForeignNoFormat = function(str)
{
    return  str.substring(0, 6) + "-" + str.substring(6, 13);
}


/**
 * deleteForeignNoFormatObj
 * 외국인번호에서 "-"를 없앤다.
 *
 * @param object
 */
iformat.iforeignno.deleteForeignNoFormatObj = function(obj)
{
    obj.value = istring.deletePattern(obj.value,  "-");
}

/**
 * deleteForeignNoFormatEvt
 * 외국인번호에 "-"를 제거한다.
 *
 * event 객체
 */
iformat.iforeignno.deleteForeignNoFormatEvt = function()
{
    var obj = window.event.srcElement;
    iformat.iforeignno.deleteForeignNoFormatObj(obj);
    obj.select();
}



/* -------------------------------------------------------------------- */
/*   10-6. iphone 구현부                                                */
/* -------------------------------------------------------------------- */

/**
 * isPhone
 * 전화번호 형식인지 체크 한다.
 * 222-3333
 *
 * @param   str
 * @return  boolean
 */
iformat.iphone.isPhone = function(str)
{
    if (inumber.isInteger(str))
    {
        if (str.length >= 7  &&  str.length <= 11)
        {
            return true;
        }
    }

    return false;
}
/**
 * isPhoneDd
 * (지역번호포함)전화번호 형식인지 체크 한다.
 * 0002-0222-3333
 *
 * @param   str
 * @return  boolean
 */
iformat.iphone.isPhoneDd = function(str)
{
    if (inumber.isInteger(str))
    {
        if (str.length >= 9  &&  str.length <= 12)
        {
            return true;
        }
    }

    return false;
}

/**
 * isCellPhone
 * 핸드폰번호 형식인지 체크 한다.
 * 010-222-3333
 *
 * @param   str
 * @return  boolean
 */
iformat.iphone.isCellPhone = function(str)
{
    if (inumber.isInteger(str))
    {
        if (str.length >= 10  &&  str.length <= 11)
        {
            return true;
        }
    }

    return false;
}

/* 전화번호 포맷제어 */

/**
 * addPhoneFormat
 * 전화번호에 구분자를 붙인다.
 *
 * @param   전화번호 (string)
 * @return  전화번호 ('-'추가)
 */
iformat.iphone.addPhoneFormat = function(str)
{
    var count = str.length;

    if (count >= 7  &&  count <= 11)
    {
        if (count == 7)
        {
            return str.substring(0, 3) + "-" + str.substring(3, 7);
        }
        else if (count == 8)
        {
            return str.substring(0, 4) + "-" + str.substring(4, 8);
        }
        else if (count == 9)
        {
            return str.substring(0, 2) + "-" + str.substring(2, 5) + "-" + str.substring(5, 9);
        }
        else if (count == 10)
        {
            if (str.substring(0, 2) == "02")
            {
                return str.substring(0, 2) + "-" + str.substring(2, 6) + "-" + str.substring(6, 10);
            }
            else
            {
                return str.substring(0, 3) + "-" + str.substring(3, 6) + "-" + str.substring(6, 10);
            }
        }
        else if (count == 11)
        {
            return str.substring(0, 3) + "-" + str.substring(3, 7) + "-" + str.substring(7, 11);
        }
    }
}

/**
 * addPhoneFormatObj
 * 전화번호에 구분자를 붙인다.
 *
 * @param   obj
 */
iformat.iphone.addPhoneFormatObj = function(obj)
{
    var value = obj.value;

    if (istring.rtrim(value) == "")
    {
        return;
    }

    value = istring.deletePattern(value,"-");

    if (!iformat.iphone.isPhone(value))
    {
        iutil.DataTypeError(obj);
        return;
    }

    obj.value = iformat.iphone.addPhoneFormat(value);
}

/**
 * addPhoneFormatEvt
 * 전화번호에 구분자를 붙인다.
 *
 * event 객체
 */
iformat.iphone.addPhoneFormatEvt = function()
{
    var obj = window.event.srcElement;
    iformat.iphone.addPhoneFormatObj(obj);
}

/**
 * deletePhoneFormatObj
 * 전화번호에서 구분자를 없앤다.
 *
 * @param object
 */
iformat.iphone.deletePhoneFormatObj = function(obj)
{
    obj.value = istring.deletePattern(obj.value, "-");
}

/**
 * deletePhoneFormatEvt
 * 전화번호에서 구분자를 없앤다.
 *
 * event 객체
 */
iformat.iphone.deletePhoneFormatEvt = function()
{
    var obj = window.event.srcElement;
    iformat.iphone.deletePhoneFormatObj(obj);
    obj.select();
}


/* -------------------------------------------------------------------- */
/*   10-7. iemail 구현부                                                    */
/* -------------------------------------------------------------------- */

/**
 * isEmail
 * 이메일 체크
 *
 * @param   email(string)
 * @return  boolean
 **/
iformat.iemail.isEmail = function(email)
{
    re  =  /[a-z0-9]{2,}@[a-z0-9-]{2,}\.[a-z0-9]{2,}/i;

    if (re.test(email))
    {
        return  true;
    }

    return  false;
}
/**
 * addEmailFormatObj
 * 이메일 포멧
 *
 * @param   object
 */
iformat.iemail.addEmailFormatObj = function(obj, focusTarget)
{
    var value = obj.value;
    if (istring.rtrim(value) == "") {
        return;
    }

    if (!iformat.iemail.isEmail(value)) {
      if(focusTarget != null){
        iutil.DataTypeError(obj, focusTarget);
        }else{
          iutil.DataTypeError(obj);
        }
        return;
    }
}

/**
 * addEmailFormatEvt
 * 이메일 포멧
 *
 * event 객체
 */
iformat.iemail.addEmailFormatEvt = function()
{
    var obj = window.event.srcElement;
    iformat.iemail.addEmailFormatObj(obj);
}
/* -------------------------------------------------------------------- */
/*   10-8. money 구현부                                             */
/* -------------------------------------------------------------------- */
/**
 * isWon
 * 원 단위인지 체크한다.
 *
 * @param   str(원)
 * @return  boolean
 */
iformat.imoney.isWon = function(num)
{
    var validPattern  = /^\d+$/;
    return  validPattern.test(num);
}

/**
 * addWonFormat
 * '원' 금액에 ","를 붙인다.
 *
 * @param   won (string)
 * @return  won (','추가)
 */
iformat.imoney.addWonFormat = function(str)
{
    var validPattern  = /^[0]{1,}[\d]{1,}/;

    if(!validPattern.test(str))
        return str;

    var i=0;
    while(str.substr(i,1)=="0")
    {
        i++;
    }
    if(str.substr(i,1)=="")
        return 0;
    else
        return str.substring(i,str.length);
}

/**
 * addWonFormatObj
 * '원' 금액에 ","를 붙인다.
 *
 * @param   object
 */
iformat.imoney.addWonFormatObj = function(obj)
{
    var value = obj.value;

    if (istring.rtrim(value) == "") {
        return;
    }

    value = istring.deletePattern(value, ",");

	var currency = obj.getAttribute("currency");
	if ( currency == null )
	{
		if (!iformat.imoney.isWon(value))
		{
			iutil.DataTypeError(obj);
			return;
		}
		obj.value = iformat.imoney.addWonFormat(value);
	}else{
		if ( !inumber.isFloat(value) )
		{
			iutil.DataTypeError(obj);
			return;
		}
		inumber.addCurrencyObj(obj);
	}

    if (obj.getAttribute("comma") != null)
        inumber.addCommaObj(obj);
}

/**
 * addWonFormatEvt
 * '원' 금액에 ","를 붙인다.
 *
 * @param  event 객체
 */
iformat.imoney.addWonFormatEvt = function()
{
    var obj = window.event.srcElement;
    iformat.imoney.addWonFormatObj(obj);
}

/**
 * isCurrency
 * 환율의 소수점을 체크한다.
 *
 * @param   str(원)
 * @return  boolean
 */
iformat.imoney.isCurrency = function(num,currency)
{
    var check = ievent.checkCurrency(num,currency);
    return  check;
}


/* ==================================================================== */
/*   11. iformat 구현부                                                 */
/* ==================================================================== */

/**
 * addAllFormatObj
 * 숫자형식에서 comma를 추가, 날짜형식에서 "-" 를 추가한다.
 * 하나의 오브젝트에 대한 것임.
 *
 * @param   obj
**/
iformat.addAllFormatObj = function(obj)
{

    if (obj.tagName == "INPUT")
    {
        dataType    = obj.getAttribute("dataType");

        if (dataType == "won" || dataType == "mwon")
        {
            iformat.imoney.addWonFormatObj(obj);
        }
        else if (dataType == "number" || dataType == "integer" || dataType == "float" ||
                 dataType == "double" || dataType == "area")
        {
            if (obj.getAttribute("comma") != null)
                inumber.addCommaObj(obj);
        }
        else if (dataType == "dateYMD")
        {
            idate.addDateYMDFormatObj(obj);
        }else if (dataType == "dateYM" )
        {
            idate.addDateYMFormatObj(obj);
        }
        else if (dataType == "dateMD" )
        {
        		idate.addDateMDFormatObj(obj);
        }
        else if (dataType == "dateY" )
        {
            idate.isYearObj(obj);
        }
        else if (dataType == "dateM")
        {
            idate.isMonthObj(obj);
        }
        else if (dataType == "datetimeHMS" )
        {
            itime.addDateTimeHMSFormatObj(obj);
        }
        else if (dataType == "datetimeHM" )
        {
            itime.addDateTimeHMFormatObj(obj);
        }
        else if (dataType == "timeHMS" )
        {
            itime.addTimeHMSFormatObj(obj);
        }
        else if ( dataType == "timeHM" )
        {
            itime.addTimeHMFormatObj(obj);
        }
        else if (dataType == "postcode")
        {
            iformat.ipost.addPostCodeFormatObj(obj);
        }
        else if (dataType == "juminno")
        {
            iformat.ijuminno.addJuminNoFormatObj(obj);
        }
        else if (dataType == "saupno")
        {
            iformat.isaupno.addSaupNoFormatObj(obj);
        }
        else if (dataType == "corpno")
        {
            iformat.icorpno.addCorpNoFormatObj(obj);
        }
        else if (dataType == "phone")
        {
            iformat.iphone.addPhoneFormatObj(obj);
        }
        else if (dataType == "natural")
        {
            if (obj.getAttribute("comma") != null)
                inumber.addCommaObj(obj);
        }
        else if (dataType == "area")
        {
        }
        else if (dataType == "foreignno")
        {
            iformat.iforeignno.addForeignNoFormatObj(obj);
        }
        else if (dataType == "eng")
        {
        }
        else if (dataType == "upper")
        {
        }
        else if (dataType == "lower")
        {
        }
        else if (dataType == "kor")
        {
        }
        else if (dataType == "email")
        {
            iformat.iemail.addEmailFormatObj(obj);
        }
        else if (dataType == "rate")
        {
            var minValue    = obj.getAttribute("minValue");
            obj.value = Number(obj.value).toFixed(minValue.length - minValue.indexOf(".")-1);
        }
        else if(dataType != null  &&  dataType != "")
        {
            iformat.addUserDefineFormatObj(obj, obj.getAttribute("dataType"));
        }
    }
}

/**
 * addAllFormat
 * 숫자형식에서 comma를 추가, 날짜형식에서 "-" 를 추가한다.
 *
 * @param   form객체
 */
iformat.addAllFormat = function(form)
{
    var obj = null;
    for (var i=0; i < form.elements.length; i++)
    {
        obj = form.elements(i);

        iformat.addAllFormatObj(obj);
    }
}

/**
 * addAllFormFormat
 * 모든 form객체의 숫자형식에 comma를 추가, 날짜형식에 "-" 를 추가한다.
 */
iformat.addAllFormFormat = function()
{
    var obj = null;
    //alert(document.forms.length)
    //document.forms[0].name
  for(var k=0; k < document.forms.length ; k++)
  {
    for (var i=0; i < eval("document." + document.forms[k].name + ".elements").length; i++)
    {
      obj = eval("document." + document.forms[k].name + ".elements").elements(i);
      iformat.addAllFormatObj(obj);
    }
  }
}

/**
 * deleteAllFormatObj
 * 숫자형식에서 comma를 없애고, 날짜형식에서 "-" 를 없앤다.
 * 하나의 오브젝트에 대한 것임.
 *
 * @param   obj
**/
iformat.deleteAllFormatObj = function(obj)
{
    if (obj.tagName == "INPUT")
    {
        dataType    = obj.getAttribute("dataType");

        if (dataType == "dateYMD" || dataType == "dateYM" || dataType == "dateMD" || dataType == "dateY" || dataType == "dateM")
        {
            istring.deletePatternObj(obj,iconst.SEP_DATE);
        }
        else if (dataType == "number" || dataType == "integer" || dataType == "float" ||
                 dataType == "double" || dataType == "area"    || dataType == "won" || dataType == "mwon")
        {
            if (obj.getAttribute("comma") != null)
                istring.deletePatternObj(obj,",");
        }
        else if (dataType == "datetimeHMS" || dataType == "datetimeHM" )
        {
            itime.deleteDateTimeFormatObj(obj);
        }
        else if (dataType == "timeHMS" || dataType == "timeHM" )
        {
            istring.deletePatternObj(obj,iconst.SEP_TIME);
        }
        else if (dataType == "postcode")
        {
            istring.deletePatternObj(obj);
        }
        else if (dataType == "juminno")
        {
            istring.deletePatternObj(obj,"-");
        }
        else if (dataType == "saupno")
        {
            istring.deletePatternObj(obj,"-");
        }
        else if (dataType == "corpno")
        {
            istring.deletePatternObj(obj,"-");
        }
        else if (dataType == "phone")
        {
            istring.deletePatternObj(obj,"-");
        }
        else if (dataType == "natural")
        {
            if (obj.getAttribute("comma") != null)
                istring.deletePatternObj(obj,",");
        }
        else if (dataType == "email")
        {
        }
        else if (dataType == "foreignno")
        {
            istring.deletePatternObj(obj,"-");
        }
        else if (dataType == "rate")
        {
            //ignore
        }
        else if(dataType != null  &&  dataType != "")
        {
            istring.deletePatternObj(obj,"-");
            istring.deletePatternObj(obj,"/");
        }
    }
}

/**
 * deleteAllFormat
 * 숫자형식에서 comma를 없애고, 날짜형식에서 "-" 를 없앤다.
 *
 * @param   form객체
 */
iformat.deleteAllFormat = function(form)
{
    for (var i=0; i<form.elements.length; i++)
    {
        obj = form.elements(i);

        iformat.deleteAllFormatObj(obj);
    }
}

/**
 * deleteAllFormFormat
 * 모든 form의 숫자형식에 comma를 없애고, 날짜형식에 "-" 를 없앤다.
 *
 * @param   form객체
 */
iformat.deleteAllFormFormat = function()
{
  for(var k=0; k < document.forms.length ; k++)
  {
    for (var i=0; i<eval("document." + document.forms[k].name + ".elements").length; i++)
    {
        obj = eval("document." + document.forms[k].name + ".elements").elements(i);
        iformat.deleteAllFormatObj(obj);
    }
  }
}

/*
 * deletePatternEvt
 * 사용자가 정의한 포멧을 삭제한다.
 *
 * @param Event 객체
 */
iformat.deleteUserDefineFormatEvt = function()
{
    var obj = window.event.srcElement;
    istring.deletePatternObj(obj,"-");
    istring.deletePatternObj(obj,"/");
    obj.select();
}
/*
 * addUserDefineFormatEvt
 * 사용자가 정의한 포멧을 추가한다.
 *
 * @param Event 객체
 */
iformat.addUserDefineFormatEvt = function()
{
    var obj = window.event.srcElement;
    iformat.addUserDefineFormatObj(obj, obj.getAttribute("dataType"));
}


/**
 * addUserDefineFormatObj
 * 사용자가 정의한 포멧을 추가한다.
 *
 * @param   object
 */
iformat.addUserDefineFormatObj = function(obj, format)
{
    //정규식을 이용하여 validate를 실시한다.
    var value = obj.value;

    if (istring.rtrim(value) == "") {
        return;
    }

    value =istring.deletePattern(value, "-");
    value =istring.deletePattern(value, "/");
    var format2= istring.deletePattern(format, "-");
    format2= istring.deletePattern(format2, "/");

    //0으로 채우기
    for(var i=0; i<format2.length; i++)
    {
        if(format2.substr(i,1)=="0" && format2.length>value.length)
            value="0"+value;
        else
            break;
    }

    if (!iformat.isUserDefineFormat(value, format2))
    {
        iutil.DataTypeError(obj);
        return;
    }
    obj.value = iformat.addUserDefineFormat(value, format);
}
/**
 * addUserDefineFormat
 * 사용자가 정의한 포멧을 추가한다.
 *
 * @param   object
 */
iformat.addUserDefineFormat = function(value, format)
{
    //정규식을 이용하여 validate를 실시한다.
    var sReturn = "";
    var regexp=/[\w,*,#]{1}/;
    for(var i=0,j=0; i<format.length ; i++)
    {
        if(regexp.test(format.substr(i,1)))
        {
            sReturn+=value.substr(j++,1);
        }
        else
        {
            sReturn+=format.substr(i,1);
        }
    }
    return sReturn;
}
/**
 * isUserDefineFormat
 * 정의한 포멧과 일치하는지 검사
 *
 * @param  값(string)
 * @param  포멧(string)
 * @return  boolean
 */
iformat.isUserDefineFormat = function(value, format)
{
    if(value.length!=format.length)
    {
        return false;
    }
    for(var i=0; i<value.length ; i++)
    {
        var str = value.substr(i,1);
        var mat = format.substr(i,1);
        switch (mat)
        {
            case "0":
            case "#":
                re  = /[\d]{1}/;
                if( !re.test(str)) return false;
                break;
            case "A":
                re  = /[a-zA-Z]/;
                if( !re.test(str)) return false;
                break;
            case "M":
                if("M"==format.substr(i+1,1))
                {
                    if(!idate.isMonth(value.substr(i,2)))
                        return false;
                    i++;
                }
                break;
            case "Y":
                try
                {
                    if(!idate.isDateYMD(value.substr(i,8)))
                    {
                        return false;
                    }
                    i+=7;
                }catch(e){return false}
                break;
            case "*":
                break;
            default :
                break;
        }
    }
    return true;
}
/* ==================================================================== */
/*   12. iajax 구현부                                                   */
/* ==================================================================== */

iajax.callbackfunc = null;
iajax.xmlhttprequest = null;
iajax.orgpostparam = "";
iajax.postparam = "";
iajax.isASyncMode = false; 	/* true : 비동기    , false : 동기 		*/
iajax.isEncMode   = false;  /* true : 암호화요청, false : 일반 요청 */ 

iajax.ixmldom = null;

/**
 * getXmlHttp
 * XMLHTTP 객체를 생성한다.
 *
 * @return HttpRequest
 */
iajax.getXmlHttp = function()
{
    /* 이미 생성이 되어 있으면 그냥 리턴한다. */
    if( iajax.xmlhttprequest != null )
        return iajax.xmlhttprequest;

    var _ixmlhttprequest = null;
    var libs = new Array('Microsoft', 'MSXML4','MSXML3','MSXML2');
    for(var i=0; i<libs.length; i++)
    {
        try
        {
            _ixmlhttprequest = new ActiveXObject(libs[i]+".XMLHTTP");
            break;
        }
        catch(e)
        {
            continue;
        }
    }

    if (_ixmlhttprequest == null)
    {
        /* XMLHttp 가 지원되지 않을때 */
        throw "XMLHttpRequest 객체를 생성할 수 없습니다.";
    }

    return _ixmlhttprequest;

}

/**
 * xmlInit
 * 초기화
 *
 */
iajax.xmlInit = function()
{
    iajax.xmlhttprequest = iajax.getXmlHttp(); 
    iajax.ixmldom = null;
    iajax.clearParam();
}

/**
 * getXmlHttpRequest
 * HttpRequest를 리턴
 *
 * @return iajax.xmlhttprequest
 */
iajax.getXmlHttpRequest = function()
{
    if( iajax.xmlhttprequest == null )
    {
        alert("iajax.xmlInit() required!");
        throw "iajax.xmlInit() required!";
    }
    return iajax.xmlhttprequest;
}

/**
 * getCallbackFunc
 * callbackfunc 리턴
 *
 * @return iajax.callbackfunc
 */
iajax.getCallbackFunc = function()
{
    if( iajax.callbackfunc == null )
    {
/*      alert("iajax.addcallback() required!"); */
/*      throw "iajax.addcallback() required!"; */
    }
    return iajax.callbackfunc;
}


/**
 * openCommon
 * callbackfunc 리턴
 *
 * @param address(주소)
 * @param bsync(true : 비동기, false : 동기 )
 */
iajax.openCommon = function(address, bsync)
{
    /* XMLHttpRequest 객체를 생성한다. */
    iajax.xmlInit();

    /* 동기모드 저장 */
    iajax.isASyncMode = bsync;

    /*true: 비동기 모드(서버와 통신하는 중에도 스크립트 실행가능)  */
    /*false 면 응답이 올때까지 기다림. 상황에 맞게 사용한다.  */
    iajax.getXmlHttpRequest().open("POST", address, bsync);

    /*iajax.getXmlHttpRequest().setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); */

	iajax.getXmlHttpRequest().setRequestHeader("Ajax", "true");
    if( arguments[2] == null )
        iajax.getXmlHttpRequest().setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
    else
        iajax.getXmlHttpRequest().setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset="+arguments[2]);
}

/**
 * open
 * 비동기모드로 URL에 접속한다.
 * 결과는 callback(iajax.addcallback(...))로 실행된다.
 * 두번째 파라미터는 Content-Type, 없으면 default로 처리한다.
 *
 * @param address(주소)
 **/
iajax.open = function(address)
{
    iajax.openCommon(address, true, "UTF-8");
	iajax.setCallBackFunc("fnProcAjaxResult");
}

/**
 * openSync
 * 동기모드로 URL에 접속한다.
 * 결과는 callback(iajax.addcallback(...))로 실행된다.
 * 두번째 파라미터는 Content-Type, 없으면 default로 처리한다.
 *
 * @param address(주소)
 **/
iajax.openSync = function(address)
{
    iajax.openCommon(address, false, "UTF-8");
    iajax.callbackfunc = null;
}

/**
 * setCallBackFunc
 * 비동기 요청시 read할 callback 함수를 등록한다.
 *
 * @param pCallbackfunc
 **/
iajax.setCallBackFunc = function(pCallbackfunc)
{
    /* xmlhttp에 신호가 왔을때 callback 함수를 실행한다. */
    iajax.callbackfunc = eval(pCallbackfunc);
}

/**
 * send
 * iajax.open에서 지정된 URL에 접속한후 postdata를 송신한다.
 *
 **/
iajax.send = function()
{
	// 일반 요청
	if(!iajax.isEncMode)
	{
		try {
			if(iajax.callbackfunc != null)
				iajax.getXmlHttpRequest().onreadystatechange = iajax.checkReadyState;

			iajax.getXmlHttpRequest().send(iajax.postparam);
		} catch(e) {
			alert("정상적으로 데이터를 보낼 수 없습니다.");
		}
	}
	// 암호화 요청
	else {
		if(iajax.callbackfunc != null)
			iajax.getXmlHttpRequest().onreadystatechange = iajax.checkReadyState;

		var postdata = GetXecureAjaxPostParam(reqaddress, iajax.postparam);

		iajax.clearParam();
		iajax.addParam("p", postdata );

		iajax.getXmlHttpRequest().send( iajax.postparam ) ;
	}
}


/**
 * getReadyState
 * callback 함수에서 사용된다. (예제참조)
 *
 * @return paramstate(파라미터 전송상태)(
   0 : uninitialized
   1 : loading
   2 : loaded
   3 : interactive
   4 : complete
   )
 **/
iajax.getReadyState = function()
{
    return iajax.getXmlHttpRequest().readyState;
}

/**
 * getStates
 * HttpRequest상태 리턴
 *
 * @return HTTP result (200, 404,,,)
 **/
iajax.getStates = function()
{
    return iajax.getXmlHttpRequest().status;
}


/**
 * getContentType
 * Content-type을 얻는다.
 *
 * @return Content-type(string)
 **/
iajax.getContentType = function()
{
    return iajax.getXmlHttpRequest().getResponseHeader("Content-type");
}

/**
 * xmlStop
 * 통신을 멈춘다.
 *
 **/
iajax.xmlStop = function()
{
    iajax.getXmlHttpRequest().abort();
}

/**
 * getXmlDoc
 * 서버에서 작성한 데이터를 XML 형태로 반환
 *
 * @return responseXML
 **/
iajax.getXmlDoc = function()
{ 
	if(iajax.ixmldom) return iajax.ixmldom;
    return iajax.getXmlHttpRequest().responseXML;
}

/**
 * getXml
 * Xml데티어 형식으로 가져옴
 *
 * @return responseXML.xml
 **/
iajax.getXml = function()
{
    return iajax.getXmlHttpRequest().responseXML.xml;
}

iajax.setXml = function(xmltext)
{
	var oXmlDom = new ActiveXObject("Microsoft.XMLDOM");
	if(oXmlDom)
	{
	    oXmlDom.loadXML(xmltext);
	    iajax.ixmldom = oXmlDom;
	}
} 

/**
 * getText
 * 서버에서 작성한 데이터를 Text 형태로 반환
 *
 * @return responseTEXT
 **/
iajax.getText = function()
{
	return iajax.getXmlHttpRequest().responseTEXT;
}

/**
 * checkReadyState
 * 전송상황을 window의 status에 보여준다.
 *
 **/
iajax.checkReadyState = function()
{
    try
    {
        if(iajax.getReadyState() == 0)
        {   /* uninitialized */
            window.status = "uninitialized";
        }
        else if(iajax.getReadyState() == 1)
        {   /* loading */
            window.status = "loading...";
        }
        else if(iajax.getReadyState() == 2)
        {   /* loaded */
            window.status = "loaded";
        }
        else if(iajax.getReadyState() == 3)
        {   /* interactive */
            window.status = "interactive";
        }
        else if(iajax.getReadyState() == 4)
        {   /* complete */
            window.status = "loading complete";

            if (iajax.getStates()==404)
            {
                alert("Wrong URL");
                return;
            }
            else if (iajax.getStates()==200)
            {
                /* Loading OK.. */
                var _ctype = iajax.getContentType();

                iajax.getCallbackFunc()();
            }
            else
            {
                alert("HTTP RESULT CODE : "+iajax.getStates()+"\n서버가 정상적으로 동작중이 아닙니다. 관리자에게 문의하세요!");
                //alert(iajax.getText());
                return;
            }
        }
    }
    catch(e)    /* error */
    {
        alert(e.name + ": " + e.message);
        return;
    }
}

/**
 * clearParam
 * 파라메터를 정보를 초기화한다.
 *
 **/
iajax.clearParam = function()
{
    iajax.postparam = "";
    iajax.orgpostparam = "";
}

/**
 * addParam
 * iajax객체에 파라미터를 추가한다.
 *
 * @param name
 * @param value
 **/
iajax.addParam = function(name1, value1)
{
	var temp;
	if(!iajax.isEncMode) {
		temp = encodeURIComponent(name1) + "=" + encodeURIComponent(value1) + "&";
	}
	else {
		temp = name1 + "=" + escape_url(value1) + "&";
	}

	iajax.postparam += temp;
}


/**
 * setComboValue
 * SELECT 개체의 OPTION을 XMLDOMDocument를 가지고 채움
 *
 * @param   selectobj   object  -   SELECT 개체
 * @param   oXmlDoc     object  -   XMLDOMDocument
 * @param   tagName     string  -   oXmlDoc에서 추출할 노드 이름
 * @param   valueField  string  -   OPTION의 값으로 사용할 필드명
 * @param   textField   string  -   OPTION의 텍스트값으로 사용할 필드명
 * @param   initValue   string  -   기본 설정 값
 * @param   topText     string  -   0번째 인덱스에 삽입할 text
 **/
iajax.setComboValue = function(selectobj, tagName, valueField, textField, initValue, topText)
{
    var oXmlDoc = iajax.getXmlDoc();

    selectobj.length    = 0;    /* 모든 OPTION 삭제 */

    initValue   = istring.nvlString(initValue, "");

    if (oXmlDoc)
    {
        if (oXmlDoc.xml && oXmlDoc.xml != "")
        {
            if (!iajax.isValidateXml(oXmlDoc))
            {
                return  null;
            }
            var nodeList    = oXmlDoc.getElementsByTagName(tagName);

			//alert(nodeList(0).childNodes.length);

            if ( nodeList.length )
            {
				if ( arguments[5] )
                    selectobj.options.add(new Option(topText, ""));

                for (var irowidx=0; irowidx<nodeList.length; irowidx++)
                {
                    var codeValue   = nodeList(irowidx).selectSingleNode(valueField).text;
                    var nameValue   = nodeList(irowidx).selectSingleNode(textField).text;

                    selectobj.options.add(new Option(nameValue, codeValue));
                }

				if(initValue == "")
					selectobj.selectedIndex = 0;
				else
					selectobj.value = initValue;
            }
        }
    }
}

/**
 * setComboValue2
 * SELECT 개체의 OPTION을 XMLDOMDocument를 가지고 채움
 *
 * @param   selectobj   object  -   SELECT 개체
 * @param   initValue   string  -   기본 설정 값
 **/
iajax.setComboValue2 = function(selectobj, initValue)
{
    var oXmlDoc = iajax.getXmlDoc();

    selectobj.length    = 0;    /* 모든 OPTION 삭제 */
    initValue   = istring.nvlString(initValue, "");

    var groupFilldName = selectobj.getAttribute("group_field");
    var codeFilldName  = selectobj.getAttribute("code_field");
    var valueFilldName = selectobj.getAttribute("name_field");


    if (oXmlDoc)
    {
        if (oXmlDoc.xml && oXmlDoc.xml != "")
        {
            if (!iajax.isValidateXml(oXmlDoc))
            {
                return  null;
            }
            var nodeList    = oXmlDoc.getElementsByTagName(groupFilldName);
            if (nodeList.length)
            {
                for (var irowidx=0; irowidx<nodeList.length; irowidx++)
                {
                    var codeValue   = nodeList(irowidx).selectSingleNode(codeFilldName).text;
                    var nameValue   = nodeList(irowidx).selectSingleNode(valueFilldName).text;

                    selectobj.options.add(new Option(nameValue, codeValue));
                    if (initValue == codeValue || initValue == nameValue)
                    {
                        selectobj.options[selectobj.length - 1].selected    = true;
                    }
                }
            }
        }
    }
}

/**
 * setObjectValue
 * value 속성을 가진 개체에  XMLDOMDocument 값을 세팅
 *
 * @param   object      object  -   value 속성을 설정할 HTML 개체
 * @param   tagName     string  -   oXmlDoc에서 추출할 노드 이름
 */
iajax.setObjectValue = function(object, tagName)
{
    var oXmlDoc = iajax.getXmlDoc();

    if (oXmlDoc)
    {
        if (oXmlDoc.xml && oXmlDoc.xml != "")
        {
            if (!iajax.isValidateXml(oXmlDoc))
            {
                return  null;
            }
            var nodeList  = oXmlDoc.getElementsByTagName(tagName);

            if (nodeList.length == 1)
            {
                object.value = nodeList(0).text;
            }
        }
    }
}

/**
 * setObjectValue
 * value 속성을 가진 개체에  XMLDOMDocument 값을 세팅
 *
 * @param   object      object  -   value 속성을 설정할 HTML 개체
 * @param   tagName     string  -   oXmlDoc에서 추출할 노드 이름
 */
iajax.setObjectValueInGroup = function(object, groupName, tagName)
{
    var oXmlDoc = iajax.getXmlDoc();

    if (oXmlDoc)
    {
        if (oXmlDoc.xml && oXmlDoc.xml != "")
        {
            if (!iajax.isValidateXml(oXmlDoc))
            {
                return  null;
            }
            var tagValue = iajax.getValueInGroup(groupName, tagName, 0);
            if ( tagValue != null )
            {
				if ( object.length == null )
				{
				    var tagValueTmp  = istring.trim(tagValue);
					if (tagValueTmp == "null" || tagValueTmp == null){
    					object.value = '';
					}else{
    					object.value = tagValue;
					}

				}else
				{
					if ( object.tagName != null )
					{
						if ( object.tagName == "SELECT" )
						{
							object.value = tagValue;
						}
					}else{
						if ( object[0].tagName == "INPUT" && object[0].type == "radio" )
						{
							iobject.RadioSetValue(object,tagValue);
						}
					}
				}
			}
        }
    }
}


/**
 * getValue
 * tagName으로 XMLDOMDocument 에서 값을 추출
 *
 * @param   tagName     string  -   oXmlDoc에서 추출할 노드 이름
 * node가 없으면 null 값 리턴
 */
iajax.getValue = function(tagName)
{
    var oXmlDoc = iajax.getXmlDoc();
    var retvar = null;
    if (oXmlDoc)
    {
        if (oXmlDoc.xml && oXmlDoc.xml != "")
        {
            if (iajax.isValidateXml(oXmlDoc))
            {
                var nodeList  = oXmlDoc.getElementsByTagName(tagName);

                if (nodeList.length == 1)
                {
                    retvar = nodeList(0).text;
                }
            }
        }
    }
    return retvar;
}

/**
 * getValue
 * tagName으로 XMLDOMDocument 에서 값을 추출
 *
 * @param   tagName     string  -   oXmlDoc에서 추출할 노드 이름
 * node가 없으면 null 값 리턴
 */
iajax.getValueInGroup = function(grpName, tagName, index)
{
    var oXmlDoc = iajax.getXmlDoc();
    var retarray = new Array();
    if (oXmlDoc)
    {
        if (oXmlDoc.xml && oXmlDoc.xml != "")
        {
            if ( iajax.isValidateXml(oXmlDoc) )
            {
                var grpNode = null;
                var tagList = null;
                if ( oXmlDoc.getElementsByTagName(grpName) != null ){
                    var length = oXmlDoc.getElementsByTagName(grpName).length;
                    if ( length > 0 )
                    {
                        grpNode = oXmlDoc.getElementsByTagName(grpName)[index];
                        tagNode = grpNode.getElementsByTagName(tagName)[0];
                        if ( tagNode.childNodes[0] != null ){
                            return tagNode.childNodes[0].nodeValue;
                        }
                    }
                }
            }
        }
    }
	return null;
}

/** setInnerHtml
 *  Svc클래스로 부터 넘겨받은 HTML 코드를 개체에 설정
 *
 *  @param   object      object  -   innerHTML 속성을 설정할 HTML 개체
 */
iajax.setInnerHtml = function(object)
{
    if ( object == null )
    {
        alert("HTML을 설정할 객체가 없습니다.!!!");
        return;
    }
    object.innerHTML = iajax.getText();
}


/**
 * getInfoFromXmlDoc
 * XML Document에서 정보를 추출
 *
 * @param   oXmlDoc object  -   XMLDOMDocument
 * @param   tagName string  -   XMLDOMDocument에서 추출할 태그명
 * @return  array   -   XMLDOMDocument에서 추출한 정보
 */
iajax.getInfoFromXmlDoc = function(oXmlDoc, tagName)
{
    var info    = new Array();
    if (oXmlDoc)
    {
        if (oXmlDoc.xml && oXmlDoc.xml != "")
        {
            if (!iajax.isValidateXml(oXmlDoc))
            {
                return  null;
            }

            var nodeList    = oXmlDoc.getElementsByTagName(tagName);
            if (nodeList.length)
            {
                var node    = nodeList(0);
                var childNodes  = node.childNodes;

                var nodeName    = "";
                var nodeValue   = "";
                for (var i=0; i<childNodes.length; i++)
                {
                    nodeName    = childNodes(i).nodeName;
                    nodeValue   = childNodes(i).text;

                    info[i] = nodeValue;
                    info[nodeName]  = nodeValue;
                }
            }
        }
    }

    return  info;
}



/**
 * getInfosFromXmlDoc
 * XMLDOMDocument에서 정보 목록을 추출
 *
 * @param   oXmlDoc object  -   XMLDOMDocument
 * @param   tagName string  -   추출할 태그 명
 * @return  array   -   추출된 정보목록
 */
iajax.getInfosFromXmlDoc = function(oXmlDoc, tagName)
{
    var infos   = new Array();
    if (oXmlDoc)
    {
        if (oXmlDoc.xml && oXmlDoc.xml != "")
        {
            var nodeList    = oXmlDoc.getElementsByTagName(tagName);
            if (nodeList.length)
            {
                for (var j=0; j<nodeList.length; j++)
                {
                    var node    = nodeList(j);
                    var childNodes  = node.childNodes;

                    var info    = new Array();

                    var nodeName    = "";
                    var nodeValue   = "";
                    for (var i=0; i<childNodes.length; i++)
                    {
                        nodeName    = childNodes(i).nodeName;
                        nodeValue   = childNodes(i).text;

                        info[i] = nodeValue;
                        info[nodeName]  = nodeValue;
                    }

                    infos[j]    = info;
                }
            }
        }
    }

    return  infos;
}

/**
 * getXmlDocFromNode
 * XMLDOMDocument의 node 값을 기준으로 XMLDOMDocument 개체 생성
 *
 * @param   oNode   object  -   XMLDOMDocument의 node
 * @return  object  XMLDOMDocument
 */
iajax.getXmlDocFromNode = function(oNode)
{

    var oXmlDom = new ActiveXObject("Microsoft.XMLDOM");
    oXmlDom.async   = false;
    oXmlDom.resolveExternals    = false;
    oXmlDom.loadXML(oNode.xml);
    return  oXmlDom;
}



/**
 * isValidateXmlINSERT INTO
    TB_PDB_PJT_INFO
(
    PJT_CODE,
    PJT_NAME,
    SYS,
    STT_YEAR,
    PM_ID,
    MNG_ID,
    PMS_STT_YN,
    CRT_PS_ID,
    CRT_DTTM
) VALUES (
    ?,
    ?,
    ?,
    ?,
    ?,
    ?,
    'N',
    ?,
    ?
);
 * 서버에서 넘긴 XMLDOMDocument가 올바른지 확인
 *
 * @param   oXmlDoc object  XMLDOMDocument
 * @return  boolean -   정상 true, 비정상 false
 */
iajax.isValidateXml = function(oXmlDoc)
{
    /*
    var nodeList    = oXmlDoc.getElementsByTagName("MessagePage");
    if (nodeList && nodeList.length)
    {
        var msg = nodeList(0).selectSingleNode("출력메세지").text;
        var ses = nodeList(0).selectSingleNode("세션유지").text;
        if (ses == "false")
        {
            alert(msg);
            fnGoLoginPage();
        }
        return  false;
    }
    */
    return  true;
}

/**
 * addParamFromForm
 * Form 객체 내부의 INPUT, SELECT, TEXTAREA객체의 값을 자동으로 addparam 시켜준다.
 *
 * @param FormObject
 * @param includeDisable //false일 때 disable된 value 제외
 */
iajax.addParamFromForm = function(FormElement, includeDisable)
{
    if ( null == FormElement )
    {
        alert("폼 객체가 존재하지 않습니다.??");
        return;
    }

    var elements = FormElement.elements;
    var TagName  = "";

    for (var j = 0; j < elements.length; j++) {
        TagName = elements(j).tagName.toLowerCase();
        if ( ( TagName == "select" )  ||
             ( TagName == "textarea")  )
        {
            if( elements(j).disabled == false ||
                elements(j).disabled == true && (includeDisable != false && includeDisable != 'false') )
            {
                iajax.addParam(elements(j).name, elements(j).value);
            }
        }
        else if ( TagName == "input" )
        {
            /* radio 객체는 checked true 것만 전송 */
            if ( elements[j].type == "radio" && elements[j].checked == false )
                continue;
            /* check 객체는 checked true 것만 전송 */
            else if ( elements[j].type == "checkbox" && elements[j].checked == false )
                continue;
            else if ( elements(j).disabled == false ||
                      elements(j).disabled == true && (includeDisable != false && includeDisable != 'false') )
            {
                iajax.addParam(elements(j).name, elements(j).value);
            }
        }
    }
}

/**
 * addParamFromFormCheckValueInit
 * Form 객체 내부의 INPUT, SELECT, TEXTAREA객체의 값을 자동으로 addparam 시켜준다.
 *
 * @param FormObject
 */
iajax.addParamFromFormCheckValueInit = function(FormElement)
{
    if ( null == FormElement )
    {
        alert("폼 객체가 존재하지 않습니다.??");
        return;
    }

    var elements = FormElement.elements;
    var TagName  = "";

    for (var j=0; j<elements.length; j++) {
        TagName = elements(j).tagName.toLowerCase();
        if ( ( TagName == "select" )  ||
             ( TagName == "textarea")  )
        {
                iajax.addParam(elements(j).name, elements(j).value);
        }
        else if ( TagName == "input" )
        {
            /* radio 객체는 checked true 것만 전송 */
            if ( elements[j].type == "radio" && elements[j].checked == false )
                iajax.addParam(elements(j).name, "");
            /* check 객체는 checked true 것만 전송 */
            else if ( elements[j].type == "checkbox" && elements[j].checked == false )
                iajax.addParam(elements(j).name, "");
            else
                   iajax.addParam(elements(j).name, elements(j).value);
        }
    }
}


/**
 * addParamFromDocument
 * Document 객체 내부의 INPUT, SELECT, TEXTAREA객체의 값을 자동으로 addparam 시켜준다.
 *
 */
iajax.addParamFromDocument = function(includeDisable)
{
    var formList = document.all.tags("form");

    var TagName  = "";
    for (var i=0; i < formList.length; i++) {
        iajax.addParamFromForm(formList(i), includeDisable);
    }
}

/**
 * setElementFromXmlDoc
 * 리턴된 xmlDoc의 값을 폼 객체에 입력
 * 단, 리턴된 xmlLink값과 엘리먼트의 name 속성은 동일해야 한다.
 *
 * @param   FormObject
 */
iajax.setElementFromXmlDoc = function(FormElement)
{

    if ( null == FormElement )
    {
        alert("폼 객체가 존재하지 않습니다.");
        return;
    }

    var elements = FormElement.elements;
    var sType  = "";
    var elementName = "";  /* 엘리먼트의 name 속성 */
    var nodeName  = "";    /* xml node의 name */
    var nodeValue = "";    /* xml node의 value */

    for (var j=0; j < elements.length; j++)
    {
        sType = iajax.getElementType( elements(j) );

        /* 현 객체의 이름을 기준으로 xmlDoc에 값이 들어 있는지 조사한다. */
        elementName = elements(j).getAttribute("name");

        /* node name 's_' 제거  - 미사용 */
        /*if ( elementName == null ) nodeName = ""; */
        /*else nodeName = elementName.replace("s_", ""); */

        if ( elementName == null ) nodeName = "";
        else nodeName = elementName;

        /* 값 찾아오기 */
        nodeValue = iajax.getValue(nodeName);

        /* 값이 있으면 각 엘리먼트에 반영한다. */
        if ( nodeValue != null )
        {
            /* 라디오와 체크는 value속성과 일치하면 checked true */
            if ( sType == "radio" || sType == "checkbox" )
            {
               if ( elements(j).value == nodeValue ) elements(j).checked = true;
               else elements(j).checked = false;
            }
            else elements(j).value = nodeValue;
        }
    }
}

/**
 * getElementType
 * 객체의 타입이름을 리턴(stirng)
 *
 * @param   Object
 * @return  ObjectType Name
 */
iajax.getElementType = function(Element)
{
    var strType  = Element.tagName.toLowerCase();

    if ( strType == "input" )
    {
        if ( Element.type.toLowerCase() == "radio" )
            strType = "radio";
        else if ( Element.type.toLowerCase() == "checkbox" )
            strType = "checkbox";
        else
            strType = "text";
    }
    return strType;
}


/**
 * getXmlLinkValue
 *
 *
 * @param  xmllink
 * @param  num
 */
iajax.getXmlLinkValue = function(xmllink, num)
{
    var xmlDom  = document.XMLDocument;
    var node = "";

    if (xmlDom == null)
    {
        alert("xmlDom is null");
    }

  /* node is array */
    if(num==1)
    {
        node    = xmlDom.selectSingleNode("//" +xmllink);
        if (node == null)
        {
            return "";
        }
        return node.text;
    }
    else
    {
        node    = xmlDom.selectNodes("//" +xmllink);
        if (node == null) {
            return "";
        }
        return node[num-1].text;
    }
}

iajax.goNextPage = function()
{
    var message     = iajax.getValue("Message");
    var usession    = iajax.getValue("UserSession");
    var nextpage    = iajax.getValue("NextPage");
    var target      = iajax.getValue("Target");
    var ServerName  = iajax.getValue("ServerName");
    var Error_Message = iajax.getValue("Error_Message");
    if (Error_Message != null && Error_Message != "") {
        message = ("[ 서버 : "+ServerName+" ]\n"+Error_Message);
    }
    iutil.goNextPage(message,   usession,   nextpage,   target);
}

/**
 * getValuetoArray
 * tagName으로 XMLDOMDocument 에서 값을 추출
 * 그룹으로 출력한 데이터를 배열로 값을 추출
 * @param   grpName     string  -   oXmlDoc에서 추출할 그룹 이름
 * @param   tagName     string  -   oXmlDoc에서 추출할 그룹의 데이터 노드 이름
 * node가 없으면 null 값 리턴
 */
iajax.getValuetoArray = function(grpName,tagName)
{
    var oXmlDoc = iajax.getXmlDoc();
    var retarray = new Array();
    var index = 0;
    if (oXmlDoc)
    {
        if (oXmlDoc.xml && oXmlDoc.xml != "")
        {
            if (iajax.isValidateXml(oXmlDoc))
            {
                var grpNode = null;
                var tagList = null;
                if ( oXmlDoc.getElementsByTagName(grpName) != null ){
                    var length = oXmlDoc.getElementsByTagName(grpName).length;
                    for(var i=0; i<length; i++) {
                        grpNode = oXmlDoc.getElementsByTagName(grpName)[i];
                        tagNode = grpNode.getElementsByTagName(tagName)[0];
                        if ( tagNode.childNodes[0] != null ){
                            retarray[index] = tagNode.childNodes[0].nodeValue;
                            ++index;
                        }
                    }
                 }
            }
        }
    }
    return retarray;
}

/* ==================================================================== */
/*   13. itable 구현부                                                  */
/* ==================================================================== */

itable.ObjectTable   = null;
itable.ROW_SEL_COLOR = "#efeccc";

/**
 * tableMake
 * 테이블을 만듬
 *
 * @param  NodeName  - XMLDocument에서 데이터를 뽑아낼 노드 이름
 * @param  TableName - 뽑아낸 데이터를 표시할 테이블
 */
itable.tableMake = function(TableID,XMLNodeName)
{
    var XmlDoc = document.XMLDocument;
    var _Node= XmlDoc.getElementsByTagName(XMLNodeName);
    var objectTable = document.getElementById(TableID);
    // 초기화 수행 해야됨(데이터가 이상하게 나오면 수정해야됨)
    // 테이블에 있는 모든 TR 객체 삭제
    while(objectTable.rows.length != 0)
    {
        objectTable.rows[objectTable.rows.length-1].removeNode(true);
    }
    var BodyNode = objectTable.childNodes[0];

    for(var iRowIndex=0;iRowIndex<_Node.length;iRowIndex++)
    {
        var oCols = _Node[iRowIndex].childNodes;
        var newRow = document.createElement("TR");
        BodyNode.appendChild(newRow);
        for(var iColIndex=0;iColIndex<oCols.length;iColIndex++)
        {
            var newCol = document.createElement("TD")
            newRow.appendChild(newCol);
            newCol.innerHTML = oCols[iColIndex].text;
        }
    }
}

/**
 * tableMakeWithURL
 * URL을 호출하고  데이터를 받아와서 해당 테이블에 데이터를 삽입
 *
 * @param  URL  - 데이터를 받을 URL
 * @param  TableID - 테이블 ID
 * @param  XMLNodeName - XmlNode이름
 */
itable.tableMakeWithURL = function(URL,TableID,XMLNodeName)
{
    // ajax를 이용해서 데이터를 XML 형식으로 받는다.
    iajax.openSync(URL);
    iajax.send();
    var XmlDoc = iajax.getXmlDoc(); // XML 객체 얻어오기
    var childNode = XmlDoc.getElementsByTagName(XMLNodeName);

    var objectTable = document.getElementById(TableID); // 테이블 객체
    var BodyNode = objectTable.childNodes[0];
    while(objectTable.rows.length != 0)
    {
        objectTable.rows[objectTable.rows.length-1].removeNode(true);
    }

    for(var i=0;i<childNode.length;i++)
    {
        var oRow = childNode[i];
        var oCols = oRow.childNodes;
        var newRow = document.createElement("TR");  // TR 생성
        BodyNode.appendChild(newRow);
        for(var ColIndex=0; ColIndex<oCols.length; ColIndex++)
        {
            var newCol = document.createElement("TD");  // TD를 생성하고 XML 데이터를 넣는다.
            newRow.appendChild(newCol);
            newCol.innerHTML = oCols[ColIndex].text;
        }
    }
}

/**
 * rowMerge
 * 테이블의 Row 방향으로 셀을 병합함.
 * 병합이 필요한 모든 셀을 Row 방향으로 병합함.
 *
 * @param  objectTable  - 테이블 객체
 * @param  StartIndex - 병합이 시작될 Row의 인덱스
 * @param  EndIndex - 병합이 끝날 Row의 인덱스
 * @param  ColIndexStartRange - 병합이 시작될 Col의 인덱스
 * @param  ColIndexEndRange - 병합이 끝날 Col의 인덱스
 */
itable.rowMerge = function(objectTable,StartIndex,EndIndex,ColIndexStartRange, ColIndexEndRange)
{
    if(StartIndex == null) StartIndex = 0;
    if(EndIndex == null) EndIndex = objectTable.rows.length - 1;
    if(ColIndexStartRange == null) ColIndexStartRange = 0;
    if(ColIndexEndRange == null) ColIndexEndRange = objectTable.rows[0].cells.length-1;

    for(var ColIndex=ColIndexEndRange; ColIndex>=ColIndexStartRange; ColIndex--)
    {
        for(var i=EndIndex;StartIndex<i;i--)
        {
            if (  ( i - 1 ) < 0 ) break;
            var j = i - 1;
            var CurrentCell = objectTable.rows[i].childNodes[ColIndex];
            var PrevCell    = objectTable.rows[j].childNodes[ColIndex];
            if(CurrentCell.innerHTML == PrevCell.innerHTML)
            {
                var PrevRowSpan = PrevCell.rowSpan;
                if ( PrevRowSpan == null ) PrevRowSpan = 1;

                var CurrentRowSpan = CurrentCell.rowSpan;
                if ( CurrentRowSpan == null ) CurrentRowSpan = 1;

                // 셀 병합
                PrevCell.rowSpan = PrevRowSpan + CurrentRowSpan;
                objectTable.rows[i].deleteCell(ColIndex);
            }
        }
    }
}

/**
 * rowMerge2
 * 테이블의 Row 방향으로 셀을 병합함. 리커시브하게 동작함
 *
 * @param  objectTable  - 테이블 객체
 * @param  StartIndex   - 병합이 시작될 Row의 인덱스
 * @param  EndIndex - 병합이 끝날 Row의 인덱스
 * @param  ColIndex - 병합이 일어날 Column 인덱스( 일반 사용자는 ColIndex를 사용할 일이 거의 없음. )
 * @param  IsAll - ColIndex가 정해지고 IsAll이 true이면 ColIndex부터 시작해서 마지막 ColIndex까지 모두다 병합한다.
                      만약 IsAll 이 false이면 해당하는 Column만 셀을 병합한다.(디폴트는 true)
 */
itable.rowMerge2 = function(objectTable,StartIndex,EndIndex,ColIndex,IsAll)
{
    if(StartIndex == null) StartIndex = 0;
    if(EndIndex == null) EndIndex = objectTable.rows.length - 1;
    if(ColIndex == null) ColIndex = 0;
    if(IsAll == null) IsAll = true;
    if(objectTable.rows[StartIndex].childNodes.length <= ColIndex)
        return;
    for(var i=StartIndex;i<=EndIndex;i++)
    {
        var CellValue = objectTable.rows[i].childNodes[ColIndex].innerHTML;
        var iStartIndex = i;
        var iEndIndex = i;
        for(var j=i+1;j<=EndIndex;j++)
        {
            var NextCellValue = objectTable.rows[j].childNodes[ColIndex].innerHTML;
            if(CellValue == NextCellValue) iEndIndex = j;
            else break;
        }
        if(iEndIndex - iStartIndex > 0)
        {
            if(IsAll)
                itable.rowMerge2(objectTable,iStartIndex,iEndIndex,ColIndex+1,true);
            // 셀 병합 코드
            var FirstRowCell = objectTable.rows[iStartIndex].childNodes[ColIndex];
            FirstRowCell.rowSpan = iEndIndex - iStartIndex + 1;
            for(var RowIndex=iStartIndex+1 ; RowIndex <= iEndIndex ; RowIndex++)
            {
                objectTable.rows[RowIndex].deleteCell(ColIndex);
            }
        }
        i = iEndIndex;
    }
}

/**
 * columnMerge
 * Column 병합
 *
 * @param  objectTable  - 테이블 객체
 * @param  StartIndex - 병합이 시작될 Row의 인덱스
 * @param  EndIndex - 병합이 끝날 Row의 인덱스
 * @param  ColIndexStartRange - 병합이 시작될 Col의 인덱스
 * @param  ColIndexEndRange - 병합이 끝날 Col의 인덱스
 */
itable.columnMerge = function(objectTable,StartIndex,EndIndex,ColIndexStartRange,ColIndexEndRange)
{
    if(StartIndex == null ) StartIndex = 0;
    if(EndIndex == null ) EndIndex = objectTable.rows.length - 1;
    if(ColIndexStartRange == null) ColIndexStartRange = 0;
    if(ColIndexEndRange == null) ColIndexEndRange = objectTable.rows[StartIndex].cells.length - 1;

    for(var iRowIndex=StartIndex ; iRowIndex <= EndIndex ; iRowIndex++)
    {
        for(var iColIndex=ColIndexEndRange ; iColIndex >= ColIndexStartRange ; iColIndex--)
        {
            var preIndex = iColIndex - 1;
            if(preIndex < 0) break;

            var CurrentCell = objectTable.rows[iRowIndex].childNodes[iColIndex];
            var PreCell = objectTable.rows[iRowIndex].childNodes[preIndex];
            if(CurrentCell == null || PreCell == null) continue;
            if(CurrentCell.innerHTML == PreCell.innerHTML)
            {
                var PreColSpan = PreCell.colSpan;
                if(PreColSpan == null) PreColSpan = 1;

                var CurrentColSpan = CurrentCell.colSpan;
                if(CurrentColSpan == null) CurrentColSpan = 1;

                // 셀 병합
                PreCell.colSpan = PreColSpan + CurrentColSpan;
                objectTable.rows[iRowIndex].deleteCell(iColIndex);
            }
        }
    }
}

/**
 * tableSetObject
 * 사용할려고 하는(테이블의 병합,속성변경 기타 등등...) 테이블의 객체를 전역 변수로 설정
 *
 * @param 테이블Object
 **/
itable.tableSetObject = function(objectTable)
{
    itable.ObjectTable = objectTable;
}

/**
 * cellGet
 * 테이블의 셀 구하기
 *
 * @param ColumnIndex - 테이블의 Column 인덱스
 * @param RowIndex - 테이블의 Row 인덱스
 * @param objectTable - 테이블 객체(테이블 객체를 지정하지 않으면 전역변수 ObjectTable을 이용한다.)
 **/
itable.cellGet = function(RowIndex,ColumnIndex,objectTable)
{
    var oTable = null;
    if(objectTable != null) oTable = objectTable;
    else if(itable.ObjectTable != null) oTable = itable.ObjectTable;

    if(oTable != null)
    {
        var Cell = oTable.rows[RowIndex].childNodes[ColumnIndex];
        return Cell;
    }
    else
    {
        return null;
    }
}

/**
 * setWidth
 * 테이블의 Width를 설정
 *
 * @param ColumnIndex - 테이블의 몇번째 Column의 Width를 설정할것인지 결정
 * @param TableWidth - Width 설정
 * @param RowIndex - 몇번째 Row의 Width를 설정할것인지 결정(안써도 무방함)
 **/
itable.setWidth = function(ColumnIndex,TableWidth,RowIndex)
{
    if(RowIndex == null) RowIndex = 0;
    var Cell = itable.cellGet(RowIndex,ColumnIndex);
    Cell.width = TableWidth;
}

/**
 * setHeight
 * 테이블의 Height를 설정
 *
 * @param RowIndex    - 테이블의 몇번째 Row의 Height를 설정할것인지 설정
 * @param TableHeight - height의 높이
 * @param ColumnIndex - 테이블의 몇번째 Column의 Height를 설정할것인지 결정
 **/
itable.setHeight = function(RowIndex,TableHeight,ColumnIndex)
{
    if(ColumnIndex == null) ColumnIndex = 0;
    var Cell = itable.cellGet(RowIndex,ColumnIndex);
    //Cell.height = TableHeight;    // <- 원래 이 구문으로 해야 되는데 울트라에디터에서 height가 Height로 바뀜(-_-;)
    eval("Cell.height = TableHeight");
}

/**
 * setHeaderStyle
 * 테이블의 헤드 부분 설정(TR)
 *
 * @param RowIndex - 헤드의 Row 인덱스 - 지정한 인덱스만 Css 스타일 설정
 * @param CssName은 tr.XXXX 로 된것중 XXXX 만 넣을것
 **/
itable.setHeaderStyle = function(RowIndex,CssName)
{
    if(itable.ObjectTable != null)
    {
        itable.ObjectTable.rows[RowIndex].className = CssName;
    }
}

/**
 * setHeaderCellStyle
 * 테이블의 헤드 부분 설정(TD)
 *
 * @param RowIndex    - 헤드의 Row 인덱스 - 지정한 인덱스만 Css 스타일 설정
 * @param ColumnIndex - 헤드의 Col 인덱스 - 지정한 인덱스만 Css 스타일 설정
 * @param CssName     - tr.XXXX 로 된 것 중  XXXX 만 넣을것
 **/
itable.setHeaderCellStyle = function(RowIndex,ColumnIndex,CssName)
{
    if(itable.ObjectTable != null)
    {
        itable.ObjectTable.rows[RowIndex].childNodes[ColumnIndex].className = CssName;
    }
}

/**
 * setBodyStyle
 * 테이블의 바디 부분 설정(TR)
 *
 * @param RowIndex - 헤드의 Row 인덱스 - 지정한 인덱스만 Css 스타일 설정
 * @param CssName은 tr.XXXX 로 된것중 XXXX 만 넣을것
 **/
itable.setBodyStyle = function(RowIndex,CssName)
{
    if(itable.ObjectTable != null)
    {
        for(var i=RowIndex;i<itable.ObjectTable.rows.length;i++)
        {
            itable.ObjectTable.rows[i].className = CssName;
        }
    }
}
/**
 * setBodyCellStyle
 * 테이블의 바디 부분 설정(TD)
 *
 * @param RowIndex    - 헤드의 Row 인덱스 - 지정한 인덱스만 Css 스타일 설정
 * @param ColumnIndex - 헤드의 Col 인덱스 - 지정한 인덱스만 Css 스타일 설정
 * @param CssName     - tr.XXXX 로 된 것 중  XXXX 만 넣을것
 * @param IsContinue  - 여러개의 셀을 동시에 적용하려면 true 하나의 셀만 적용하려면 false
 **/
itable.setBodyCellStyle = function(RowIndex,ColumnIndex,CssName,IsContinue)
{
    if(itable.ObjectTable != null)
    {
        if(IsContinue == true)
        {
            var backIndex = itable.ObjectTable.rows[RowIndex].childNodes.length - 1 - ColumnIndex;
            for(var i=RowIndex;i<itable.ObjectTable.rows.length;i++)
            {
                var frontIndex = itable.ObjectTable.rows[i].childNodes.length - 1 - backIndex;
                if(frontIndex < 0) continue;
                itable.ObjectTable.rows[i].childNodes[frontIndex].className = CssName;
            }
        }
        else
        {
            itable.ObjectTable.rows[RowIndex].childNodes[ColumnIndex].className = CssName;
        }
    }
}

/**
 * rowSearch
 * 테이블에서 선택될 row 찾기
 *
 * @param table - table객체
 * @param strCell - td객체
 **/

itable.rowSearch = function(table ,strCell)
{
    for(var i=0 ; i<table.rows.length ; i++)
    {
        var temp = table.rows(i).pk;
        if( strCell==temp && temp!='' )
            itable.rowClick( table.rows(i));
    }
}

/**
 * rowMouseOver
 * 테이블 행에 마우스를 이동시켰을 때의 색깔 변경
 *
 * @param   tr객체
 */
itable.rowMouseOver = function(tr)
{
    if (tr.currentStyle.backgroundColor != itable.ROW_SEL_COLOR)
    {
		tr.style.cssText = "background-color:#F1F1F1;cursor:hand;";
		for (var i = 0;  i < tr.childNodes.length;  i++)
		{
			tr.childNodes[i].style.cssText = "background-color:#F1F1F1;";
		}
    }
}

/**
 * rowMouseOut
 * 테이블 행에 마우스를 이동시켰을 때의 색깔 복귀
 *
 * @param   tr객체
 */
itable.rowMouseOut = function(tr)
{
	tr.style.cssText = "";
	for (var i = 0;  i < tr.childNodes.length;  i++)
	{
		tr.childNodes[i].style.cssText = "";
	}
}

/**
 * rowClick
 * 테이블 행에 마우스로 클릭했을 경우의 색깔 지정
 *
 * @param   tr객체
 */
itable.rowClick = function(tr)
{
    if (tr.currentStyle.backgroundColor == itable.ROW_SEL_COLOR)
    {
        return;
    }

    var tbl = tr.parentElement.parentElement;
    var rows= tbl.rows.length;

    for (var i=0; i<rows; i++)
    {
        if (tbl.rows[i] == tr)
        {
            tr.style.backgroundColor    = itable.ROW_SEL_COLOR;
            tr.runtimeStyle.backgroundColor = itable.ROW_SEL_COLOR;
        }
        else
        {
            if (tbl.rows[i].className != "gridhead")
            {
                tbl.rows[i].style.backgroundColor = "#ffffff";
                tbl.rows[i].runtimeStyle.backgroundColor = "";
            }
        }
    }
}

/* ==================================================================== */
/*   14. igrid 구현부                                                       */
/* ==================================================================== */

igrid.prefix = "GRID_";

/**
 * addDataArrayToForm
 * 배열 데이타를 구분자로 묶어 문자열로 만들고 INPUT 객체에 담음
 *
 * @param   prefix      - 파라미터 이름 접두어
 * @param   paramName   - 파라미터 이름
 * @param   dataArray   - 데이타 배열
 * @param   delimiter   - 구분자
 * @param   dataCellId  - 데이타를 담을 셀 아이디
 */
igrid.addDataArrayToForm = function(prefix, paramName, dataArray, delimiter, dataCellId)
{
    var dataCellObj = document.getElementById(dataCellId);
    var dataStr = "";

    if(dataArray.length <= 0)
        return;

    var param_value = "";
    for(var i=0; i<dataArray.length; i++)
    {
        param_value = param_value + delimiter + dataArray[i];
    }
    var dataStr = igrid.addInputBoxStr(dataStr, prefix + paramName, param_value);
    dataCellObj.innerHTML = dataCellObj.innerHTML + dataStr;
}

/**
 * addDataArrayToAjax
 * 배열 데이타를 구분자로 묶어 문자열로 만들고 Ajax 파라미터로 추가
 *
 * @param   prefix      - 파라미터 이름 접두어
 * @param   paramName   - 파라미터 이름
 * @param   dataArray   - 데이타 배열
 * @param   delimiter   - 구분자
 */
igrid.addDataArrayToAjax = function(prefix, paramName, dataArray, delimiter)
{
    var dataStr = "";

    if(dataArray.length <= 0)
        return;

    var param_value = "";
    for(var i=0; i<dataArray.length; i++)
    {
        param_value = param_value + delimiter + dataArray[i];
    }
    iajax.addParam(prefix + paramName, param_value);
}

/**
 * addParamGrid
 * 그리드의 전체 데이터를 ajax 파라미터로 setting
 *
 * @param   gridObject  - 그리드 객체
 */
igrid.addParamGridData = function(gridObject,gridName)
{
    var nRowCount = 0;
	var nColCount = 0;

	nRowCount = gridObject.GetTotRowCnt();
	nColCount = gridObject.GetColCount();

	for(var nRow = 0; nRow < nRowCount; nRow++) {
		for(var nCol = 0; nCol < nColCount; nCol++) {
			var paramName = gridObject.GetCellXmlLink(nRow, nCol);
			var paramValue = gridObject.GetCellData(nRow, nCol);
			if( paramValue.indexOf('-')==0 ){
				paramValue = istring.deletePattern(paramValue, iconst.SEP_TIME);	// 시간구분자 제거
				paramValue = istring.deletePattern(paramValue, iconst.SEP_MONEY); 	// 금액단위 제거
			}
			else{
				paramValue = istring.deletePattern(paramValue, iconst.SEP_DATE);	// 날짜구분자 제거
				paramValue = istring.deletePattern(paramValue, iconst.SEP_TIME);	// 시간구분자 제거
				paramValue = istring.deletePattern(paramValue, iconst.SEP_MONEY); 	// 금액단위 제거
			}
			iajax.addParam(gridName + paramName, paramValue);
		}
	}
}

/**
 * addParamCheckedGridData
 * 체크박스의 체크된 그리드의 데이터를 ajax 파라미터로 setting
 *
 * @param   gridObject  - 그리드 객체
 * @param   columnName  - 체크박스 컬럼명
 *
 */
igrid.addParamCheckedGridData = function(gridObject,columnName,gridName)
{
    var nRowCount = 0;
	var nColCount = 0;

	nRowCount = gridObject.GetTotRowCnt();
	nColCount = gridObject.GetColCount();

	for(var nRow = 0; nRow < nRowCount; nRow++) {
		if ( gridObject.GetCellDataByName(nRow, columnName) == 1 ){
			for(var nCol = 0; nCol < nColCount; nCol++) {
				var paramName = gridObject.GetCellXmlLink(nRow, nCol);
				var paramValue = gridObject.GetCellData(nRow, nCol);

				paramValue = istring.deletePattern(paramValue, iconst.SEP_DATE);	// 날짜구분자 제거
				paramValue = istring.deletePattern(paramValue, iconst.SEP_TIME);	// 시간구분자 제거
				paramValue = istring.deletePattern(paramValue, iconst.SEP_MONEY); // 금액단위 제거

				iajax.addParam(gridName + paramName, paramValue);
			}
		}
	}
}

/**
 * addParamSelColumnGridData
 * 컬럼 리스트에 해당하는 그리드의 전체 데이터를 ajax 파라미터로 setting
 *
 * @param   gridObject  - 그리드 객체
 * @param   colNameList - 그리드 컬럼명 Array
 */
igrid.addParamSelColumnGridData = function(gridObject, colNameList, gridName)
{
	var nRowCount = gridObject.GetTotRowCnt();

	for(var nRow = 0; nRow < nRowCount; nRow++) {
		for(var nCol = 0; nCol < colNameList.length; nCol++) {
			var paramName  = colNameList[nCol];
			var paramValue = gridObject.GetCellDataByName (nRow, colNameList[nCol]);

			paramValue = istring.deletePattern(paramValue, iconst.SEP_DATE);	// 날짜구분자 제거
			paramValue = istring.deletePattern(paramValue, iconst.SEP_TIME);	// 시간구분자 제거
			paramValue = istring.deletePattern(paramValue, iconst.SEP_MONEY); 	// 금액단위 제거

			iajax.addParam(gridName + paramName, paramValue);
		}
	}
}

/**
 * addParamSelColumnCheckedGridData
 * 체크된 그리드의 컬럼 리스트에 해당하는 데이터를 ajax 파라미터로 setting
 *
 * @param   gridObject  - 그리드 객체
 * @param   colNameList - 그리드 컬럼명 Array
 * @param   columnName  - 체크박스 컬럼명
 */
igrid.addParamSelColumnCheckedGridData = function(gridObject, colNameList, columnName, gridName)
{
	var nRowCount = gridObject.GetTotRowCnt();

	for(var nRow = 0; nRow < nRowCount; nRow++) {
		if ( gridObject.GetCellDataByName(nRow, columnName) == 1 ){
			for(var nCol = 0; nCol < colNameList.length; nCol++) {
				var paramName  = colNameList[nCol];
				var paramValue = gridObject.GetCellDataByName (nRow, colNameList[nCol]);

				paramValue = istring.deletePattern(paramValue, iconst.SEP_DATE);	// 날짜구분자 제거
				paramValue = istring.deletePattern(paramValue, iconst.SEP_TIME);	// 시간구분자 제거
				paramValue = istring.deletePattern(paramValue, iconst.SEP_MONEY); 	// 금액단위 제거

				iajax.addParam(gridName + paramName, paramValue);
			}
		}
	}
}

/**
 * addParamGridTot
 * 그리드의 전체 데이터를 ajax 파라미터로 setting
 *
 * @param   gridObject  - 그리드 객체
 * @param   gridName    - 그리드 그룹명
 */
igrid.addParamGridTot = function(gridObject, gridName)
{
	igrid.addParamGridTitle(gridObject,gridName);
	igrid.addParamGridData(gridObject,gridName);
}


/**
 * addParamCheckedGridTot
 * 체크된 그리드의  전체 타이틀과 데이터를 ajax 파라미터로 setting
 *
 * @param   gridObject   - 그리드 객체
 * @param   gridName     - 그리드 그룹명
 * @param   checkColName - 체크박스 컬럼명
 *
 */
igrid.addParamCheckedGridTot = function(gridObject, gridName, checkColName)
{
	igrid.addParamGridTitle(gridObject,gridName);
	igrid.addParamCheckedGridData(gridObject,checkColName,gridName);
}

/**
 * addParamSelColumnGridTot
 * 컬럼리스트에 해당하는 타이틀과 데이터를 ajax 파라미터로 setting
 *
 * @param   gridObject   - 그리드 객체
 * @param   gridName     - 그리드 그룹명
 * @param   ColNameList  - 그리드 컬럼명 Array
 *
 */
igrid.addParamSelColumnGridTot = function(gridObject, gridName, colNameList)
{
	igrid.addParamSelColumnGridTitle(gridObject,gridName,colNameList);
	igrid.addParamSelColumnGridData(gridObject,colNameList,gridName);
}

/**
 * addParamSelColumnCheckedGridTot
 * 체크된 그리드의 컬럼 리스트에 해당하는 타이틀과 데이터를 ajax 파라미터로 setting
 *
 * @param   gridObject   - 그리드 객체
 * @param   gridName     - 그리드 그룹명
 * @param   colNameList  - 그리드 컬럼명 Array
 * @param   checkColName - 체크박스 컬럼명
 *
 */
igrid.addParamSelColumnCheckedGridTot = function(gridObject, gridName, colNameList, checkColName)
{
	igrid.addParamSelColumnGridTitle(gridObject,gridName,colNameList);
	igrid.addParamSelColumnCheckedGridData(gridObject,colNameList,checkColName,gridName);
}

/**
 * addParamGridTitle
 * 그리드의 타이틀을 파라미터로 생성한다.
 *
 * @param   gridObject   - 그리드 객체
 * @param   gridName     - 그리드 그룹명
 *
 */
igrid.addParamGridTitle = function(gridObject,gridName)
{
	var nColCount  = 0;
	var paramName  = gridName;
	var paramValue = "";

	nColCount = gridObject.GetColCount();

	for(var nCol = 0; nCol < nColCount; nCol++) {
		paramValue = paramValue + gridObject.GetCellXmlLink(0, nCol) + "/";
	}
	iajax.addParam(paramName, paramValue);
}

/**
 * addParamSelColumnGridTitle
 * 그리드의 컬럼 리스트에 존재하는 타이틀을 파라미터로 생성한다.
 *
 * @param   gridObject   - 그리드 객체
 * @param   gridName     - 그리드 그룹명
 * @param   colNameList  - 그리드 컬럼명 Array
 *
 */
igrid.addParamSelColumnGridTitle = function(gridObject,gridName,colNameList)
{
	var nColCount  = 0;
	var paramName  = gridName;
	var paramValue = ""

	for(var nCol = 0; nCol < colNameList.length; nCol++) {
		paramValue = paramValue + colNameList[nCol] + "/";
	}
	iajax.addParam(paramName, paramValue);
}

/**
 * addInputBoxStr
 * 데이타를 담을 INPUT 태그 생성
 *
 * @param   str     - 기존 문자열
 * @param   name    - 파라미터 이름
 * @param   value   - 파라미터 값
 */
igrid.addInputBoxStr = function(str, name, value)
{
    return str + "<INPUT TYPE='TEXT' NAME='" + name + "' VALUE='" + value + "'>";
}

/**
 * setGrid2Form
 * 데이타를 담을 INPUT 태그 생성
 *
 * @param   FormElement - form
 * @param   GridObj     - 그리드 이름
 * @param   nRow        - 선택행
 */
igrid.getColSum = function(GridObj,  nRowNm)
{

    if ( null == GridObj )
    {
     alert("폼 객체가 존재하지 않습니다.");
     return;
    }
    var tot = 0;

    for (var j=0; j < GridObj.GetTotRowCnt(); j++)
    {
        tot = tot + parseInt(inumber.nvlNumber(istring.deletePattern(GridObj.GetCellDataByName(j,nRowNm),",")));
    }
    return tot
}
/**
 * InitGridCol
 * 데이타를 담을 INPUT 태그 생성
 *
 * @param   FormElement - form
 * @param   GridObj     - 그리드 이름
 * @param   nRow        - 선택행
 */
igrid.InitGridCol = function(GridObj,  nRowNm)
{

    if ( null == GridObj )
    {
     alert("폼 객체가 존재하지 않습니다.");
     return;
    }
    for (var j=0; j < GridObj.GetTotRowCnt(); j++)
    {
        GridObj.SetCellDataByName(j,nRowNm,"0")
    }
}
/**
 * setGrid2Form
 * 데이타를 담을 INPUT 태그 생성
 *
 * @param   FormElement - form
 * @param   GridObj     - 그리드 이름
 * @param   nRow        - 선택행
 */
igrid.initNumberCol = function(GridObj,  nRowNm)
{

    if ( null == GridObj )
    {
     alert("폼 객체가 존재하지 않습니다.");
     return;
    }


    for (var j = 0; j < GridObj.GetTotRowCnt(); j++)
    {
        GridObj.SetCellDataByName(j,nRowNm,0);
    }

}

/**
 * setGrid2Form
 * 데이타를 담을 INPUT 태그 생성
 *
 * @param   FormElement - form
 * @param   GridObj     - 그리드 이름
 * @param   nRow        - 선택행
 */
igrid.setFormFromGrid = function(FormElement, GridObj,  nRow)
{

    if ( null == FormElement )
    {
     alert("폼 객체가 존재하지 않습니다.");
     return;
    }

     var elements = FormElement.elements;
     var sType  = "";
     var elementName = "";  /* 엘리먼트의 name 속성 */
     var nodeName  = "";    /* xml node의 name */
     var nodeValue = "";    /* xml node의 value */

     for (var j = 0; j < elements.length; j++)
     {
          sType = iajax.getElementType( elements(j) );

         /* 현 객체의 이름을 기준으로 xmlDoc에 값이 들어 있는지 조사한다. */
         elementName = elements(j).getAttribute("name");

         if ( elementName == null ) nodeName = "";
         else nodeName = elementName;

         /* 값 찾아오기 */
        nodeValue = GridObj.GetCellDataByName(nRow, nodeName);
    //alert("NodeName : " + nodeName +" NodeValue : "+ nodeValue);
        /* 값이 있으면 각 엘리먼트에 반영한다. */
         if ( nodeValue != null )
         {
             /* 라디오와 체크는 value속성과 일치하면 checked true */
          if ( sType == "radio" || sType == "checkbox" )
           {
            if ( elements(j).value == nodeValue ) elements(j).checked = true;
              else elements(j).checked = false;
           }
           else elements(j).value = nodeValue;
         }
     }
}

/* ==================================================================== */
/*   기타                                                               */
/* ==================================================================== */

document.ondragstart    = function() {return false;};

/**
 * OBJECT 태그를 내부에 포함한 객체에서 TEXT 값을 document객체에 쓰는 함수
 * @param   ObjectScriptElementID  OBJECT 태그를 내부에 포함한 객체의 ID
 */

function _WriteObject(ObjectScriptElementID)
{
    document.write( ObjectScriptElementID.text );
    ObjectScriptElementID.id = "";
}

/**
 * setButtonUDable
 * 화면 버튼ID별 disable 컨트롤을 하기 위한 함수.
 * @param _objectID (buttonID)
 * @param _boolAble (true/false)
 * @param _object,_boolAble 묶음으로 파라미터 전송.
  * ex) setButtonUDable(img_id01, true, img_id02, false ,.....)
 *******************************************************************************/
function setButtonUDable()
{
    var argCnt = setButtonUDable.arguments.length;
    var _objectID;
    var _boolAble;

    for(var i=0; i<argCnt; i++) {
        if(i%2 == 0) {
            _objectID = setButtonUDable.arguments[i];
        }else if(i%2 == 1) {
            _boolAble = setButtonUDable.arguments[i];

            if(_boolAble) {
                document.getElementById(_objectID).disabled = false;
                document.getElementById(_objectID).style.cursor = 'hand';
            }else {
                document.getElementById(_objectID).disabled = true;
                document.getElementById(_objectID).style.cursor = 'none';
            }
        }
    }
}

function addComboValueToInputList(combo, delimiter, inputbox)
{
    var vComboValue = "";
    for(var i = 0; i < combo.options.length; i++)
    {
        vComboValue += combo.options[i].value + delimiter;
    }
    if(vComboValue.length != 0)
        inputbox.value = vComboValue;
}

//Loading Page 함수
var go_WaitWin = null;
function StartLoading()
{
    var displayMessage = '데이터 처리중입니다.'; // default message!!!!!
    var argCnt = StartLoading.arguments.length;  // message 전송유무(1.사용자메세지지정 0.디폴트메시지)

    if(argCnt == 1) {
        displayMessage = StartLoading.arguments[0];
    }

    try
    {
        if (go_WaitWin != null)
        {
            go_WaitWin.close();
        }
        go_WaitWin = iwindow.openModalessWindow("/Form/processing.html",displayMessage, 155, 125);
        go_WaitWin.focus();
    }
    catch(ex)
    {
        //window.status = "오류발생 : 브라우저를 새로고침 해 주십시오.";
    }
}
function FinishLoading()
{
    if (go_WaitWin != null)
    {
        go_WaitWin.close();
        go_WaitWin = null;
    }
    window.focus();
}

/**
 * setFormFromMultiRec
 * XmlDoc로부터 그룹레코드를 찾아 화면필드에 바인딩해준다.
 *
 * @param   FormElement   object  -   SELECT 개체
 * @param   groupName     object  -   XMLDOMDocument
 * @param   idx     string  -   oXmlDoc에서 추출할 노드 이름
 **/
setFormFromMultiRec = function(oXmlDoc,FormElement, groupName, idx)
{

    if ( null == FormElement )
    {
        alert("폼 객체가 존재하지 않습니다.");
        return;
    }

    var elements = FormElement.elements;
    var sType  = "";
    var elementName = "";  /* 엘리먼트의 name 속성 */
    var nodeName  = "";    /* xml node의 name */
    var nodeValue = "";    /* xml node의 value */

    if (oXmlDoc)
    {
        if (oXmlDoc.xml && oXmlDoc.xml != "")
        {

            var nodeList    = oXmlDoc.getElementsByTagName(groupName);

            if (nodeList.length)
            {
                if(nodeList.length< (idx+1) )
                {
                   // alert("Array Out Of Bound Exception");
                    return
                }
                for (var j=0; j < elements.length; j++)
                {
                    sType = iajax.getElementType( elements(j) );

                    /* 현 객체의 이름을 기준으로 xmlDoc에 값이 들어 있는지 조사한다. */
                    elementName = elements(j).getAttribute("name");

                    if(sType=="button") continue;
                    if ( elementName == null ) nodeName = "";
                    else nodeName = elementName;

                    nodeValue = nodeList(idx).selectSingleNode(nodeName);
                    if(nodeValue==null) continue;
                     /* 값 찾아오기 */
                    nodeValue = nodeValue.text;
                    //alert("NodeName : " + nodeName +" NodeValue : "+ nodeValue);
                    /* 값이 있으면 각 엘리먼트에 반영한다. */
                    if ( nodeValue != null )
                    {
                    /* 라디오와 체크는 value속성과 일치하면 checked true */
                    if ( sType == "radio" || sType == "checkbox" )
                    {
                        if ( elements(j).value == nodeValue ) elements(j).checked = true;
                        else elements(j).checked = false;
                    }
                    else elements(j).value = nodeValue;
                    }
                }
            }
        }
    }
}

/**
 * setFormFromMultiRec
 * XmlDoc로부터 그룹레코드를 찾아 화면필드에 바인딩해준다.
 *
 * @param   FormElement   object  -   SELECT 개체
 * @param   groupName     object  -   XMLDOMDocument
 * @param   idx     string  -   oXmlDoc에서 추출할 노드 이름
 **/
setDisableForm = function(FormElement)
{

    if ( null == FormElement )
    {
        alert("폼 객체가 존재하지 않습니다.");
        return;
    }

    var elements = FormElement.elements;
    var sType  = "";

    for (var j=0; j < elements.length; j++)
    {
        sType = iajax.getElementType( elements(j) );

        if ( sType=="button" || sType == "radio"
			|| sType == "checkbox" || sType == "select" ){
            elements(j).disabled= true;
        }else {
			elements(j).readOnly= true;
		}
    }
}

/**
 * str을 디버그 창에 나타낸다.
 *
 * @param str
 * @param mode
 * @param multiLine
 * @param isHtml
 */
function Debug(str, mode, multiLine, isHtml)
{
	try
	{
		if (debug_mode || debug_mode == "STOP")
		{
			var win = window.open("", "Debug_window", "width=600,height=550,toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes");
			win.document.title = "Debug_window";
			if (win)
			{
				if (win.document.body.innerHTML == "")
				{
					win.document.write("<CENTER><INPUT type=button value='clear' onClick='document.body.innerHTML=\"\"'></CENTER>");
				}
				if (isHtml)
				{
					// html 태그 변환하지 않음
				}
				else
				{
					if (multiLine)
					{
						str = str.replace(/\n/g, "<br>").replace(/ /g, "&nbsp;");
					}
					else
					{
						str = str.replace(/\\/g, "&quot").replace(/&/g, "&amp").replace(/</g, "&lt").replace(/>/g, "&gt");
					}
				}
				win.document.write("<div style='background-color:#c0c0ff; FONT-FAMILY: Courier New; FONT-SIZE: 12px;'>"+str+"</div><br>");
				win.focus();
			}
		}
		if (debug_mode  &&  (mode == "STOP" || debug_mode == "STOP"))
		{
			alert("Debug mode");
		}
	}
	catch (e)
	{
	}
}

/**
 * 디버그시 실행을 일시 중지하고 alert 창을 띄운다.
 *
 * @param str
 */
function DebugStop(str)
{
	Debug(str,"STOP");
}

/**
 * 조회영역의 form에서 event가 발생했는지 check한다.
 *
 * @param obj : event가 발생한 object
 * @param obj : check할 form명
 */
function fnEnterZoneCheck(obj, MyForm)
{
	var bool = false;
   	for ( var i=0; i< MyForm.elements.length ; i++){
		if ( obj == MyForm.elements(i) ){
	      bool = true;
		  break;
		}
    }
	return bool;
}

/**
* 입력시 다음 focus로 이동
*
* @param pLength : inputbox 자리수
* @param pValue : 현재 inputbox의 값 (this.value)
* @param nextObject : focus가 옮겨갈 object (frmDetail.inputbox명)
*/
function NextFocus(pLength, pValue , nextObject) {

	if(pLength == pValue.length) {
		nextObject.focus();
	}
}

/**
 * Js_calculator
 * 사칙연산을 수행한다.
 *
 * @param   Object operator(연산자 : +, -, *, /)
 * @param   Object beforVal(값1)
 * @param   Object afterVal(값2)
 * @return  String
 */
function Js_calculator(operator, beforVal, afterVal, roundMode){
	iajax.openSync("PeCommon.do");
	iajax.addParam(iconst.OPCODE, iconst.S04);
	iajax.addParam("operator", operator);
	iajax.addParam("beforVal", beforVal);
	iajax.addParam("afterVal", afterVal);

	var g_roundMode = roundMode;
	if(g_roundMode == undefined){
	  g_roundMode = "";
	}

	if(g_roundMode != null || g_roundMode != ""){
	  iajax.addParam("roundMode", g_roundMode);
	}
	iajax.send();

	return iajax.getValue("result");
}


